Анимация в Mapbox GL JS строится вокруг управления камерой карты, переходами стилей слоёв и интерполяцией свойств. В основе лежит единая модель: любое изменение состояния карты может быть выполнено либо мгновенно, либо с плавной интерполяцией параметров во времени.
Ключевые области анимации:
Метод easeTo используется для плавного перемещения
камеры к заданному состоянию.
Основные параметры:
Пример конфигурации:
map.easeTo({
center: [69.5978, 42.3176],
zoom: 10,
bearing: 45,
pitch: 60,
duration: 2000,
easing: (t) => t
});
Параметр duration определяет длину анимации. При
значениях:
Длительность влияет на восприятие навигации: короткие анимации подходят для интерфейсов, длинные — для презентационных сценариев.
Функция easing принимает значение t в
диапазоне от 0 до 1 и возвращает скорректированное значение
прогресса.
Наиболее распространённые варианты:
t => tt => t * tt => 1 - Math.pow(1 - t, 3)Использование easing влияет на “характер” движения камеры, делая его механическим или естественным.
Параметр offset задаёт смещение центра в пикселях:
map.easeTo({
center: [69.6, 42.3],
offset: [200, 0]
});
Применяется для:
Метод flyTo создаёт более сложную траекторию движения
камеры, имитируя “полёт” над картой.
Ключевые параметры:
map.flyTo({
center: [69.6, 42.3],
zoom: 12,
speed: 1.2,
curve: 1.5,
pitch: 45,
bearing: -30
});
speed управляет тем, насколько быстро камера проходит
маршрут.
При увеличении масштаба или дальних перемещениях speed
становится ключевым параметром восприятия динамики.
curve определяет форму траектории:
1.0 — более выраженная дуга
Эффект особенно заметен при перемещениях между удалёнными точками.
Флаг essential используется для обозначения критически
важных анимаций (например, навигации по маршруту). Он влияет на
поведение в условиях ограничений производительности или пользовательских
настроек уменьшенной анимации.
Метод jumpTo отключает анимацию и мгновенно применяет
новое состояние камеры.
map.jumpTo({
center: [69.6, 42.3],
zoom: 10,
pitch: 30
});
Используется в случаях:
Помимо камеры, Mapbox GL JS поддерживает анимацию визуальных свойств
слоёв через transition.
Каждый слой может содержать блок переходов:
map.setPaintProperty('water-layer', 'fill-color', '#00f');
И отдельно:
map.setPaintProperty('water-layer', 'fill-color-transition', {
duration: 1000,
delay: 0
});
Определяет длительность изменения свойства.
Задаёт задержку перед началом анимации.
fill-colorline-widthcircle-radiusopacitytext-opacityКаждое свойство интерполируется линейно или через встроенные функции интерполяции Mapbox.
При смене стиля карты используется механизм плавного перехода между наборами слоёв и источников.
map.setStyle('mapbox://styles/mapbox/satellite-streets-v12');
Параметры анимации здесь не задаются напрямую, но поведение зависит от:
Для управления ощущением плавности часто комбинируется с камерными анимациями:
map.easeTo({ zoom: 5, duration: 1500 });
map.setStyle('mapbox://styles/mapbox/light-v11');
Анимационные методы связаны с событиями жизненного цикла карты:
movestartmovemoveendzoomstartzoomzoomendКаждое движение камеры вызывает цепочку событий, позволяя синхронизировать интерфейс:
map.on('moveend', () => {
console.log('камера завершила анимацию');
});
Mapbox GL JS поддерживает одновременное выполнение:
Конкуренция между анимациями разрешается по принципу последнего вызова: новые параметры перекрывают предыдущие.
Внутри движка используется временная функция интерполяции:
[0, 1]Камера представляется как набор параметров:
Каждый параметр интерполируется независимо, что позволяет создавать сложные траектории движения.
easeTo перезапускают
интерполяциюflyTo может переопределять текущую анимацию камерыАнимации часто привязываются к событиям интерфейса:
Пример связки:
map.on('click', (e) => {
map.flyTo({
center: e.lngLat,
zoom: 14,
speed: 1.4
});
});
Для построения сложных сцен обычно комбинируются:
flyTo для перемещенияpitch и bearing для ориентацииtransition слоёв для синхронной визуализации
данныхmoveend для запуска следующего этапа
анимацииТакая композиция позволяет формировать последовательные “кадры” навигации, где карта ведёт себя как управляемая камера в пространстве.