В Mapbox GL JS управление камерой карты реализовано через набор
методов, которые позволяют программно изменять положение, масштаб,
наклон и вращение вида. Среди базовых инструментов навигации ключевую
роль играют flyTo, jumpTo и
easeTo. Эти методы решают одну задачу — перемещение камеры
— но делают это принципиально разными способами: мгновенно, плавно или с
имитацией «полёта».
Камера в Mapbox GL JS описывается объектом состояния, включающим:
center — координаты центра картыzoom — уровень масштабированияbearing — угол поворота картыpitch — наклон камерыЛюбой из навигационных методов изменяет одно или несколько из этих значений, вызывая перерисовку сцены WebGL.
Метод jumpTo выполняет резкое, мгновенное изменение
состояния камеры без анимации.
map.jumpTo(options);
map.jumpTo({
center: [longitude, latitude],
zoom: number,
bearing: number,
pitch: number
});
jumpTo изменяет состояние карты без промежуточных
кадров. Камера «телепортируется» в новое положение.
Метод easeTo обеспечивает плавное перемещение камеры с
контролем кривой анимации и длительности.
map.easeTo(options);
map.easeTo({
center: [lng, lat],
zoom: number,
duration: number,
easing: function,
bearing: number,
pitch: number,
offset: [x, y]
});
easeTo интерполирует состояние камеры от текущего
положения к целевому, используя функцию сглаживания. По умолчанию
применяется плавная экспоненциальная кривая.
easing: (t) => t
t — прогресс анимации от 0 до 1map.easeTo({
center: [37.6173, 55.7558],
zoom: 10,
duration: 1500,
easing: (t) => t * (2 - t)
});
Метод flyTo создаёт анимацию, напоминающую полёт над
картой: камера сначала отдаляется, затем перемещается по дуге и
приближается к цели.
map.flyTo(options);
map.flyTo({
center: [lng, lat],
zoom: number,
speed: number,
curve: number,
easing: function,
essential: boolean
});
flyTo разбивает движение камеры на траекторию,
имитирующую физическое перемещение в пространстве. В отличие от
easeTo, траектория не линейная, а дугообразная.
Определяет скорость анимации. Чем выше значение, тем быстрее происходит «полёт».
speed: 1.2
Контролирует кривизну траектории:
curve: 1.5
Флаг важности анимации:
essential: true
Используется для доступности интерфейса, чтобы учитывать системные настройки уменьшенной анимации.
map.flyTo({
center: [2.3522, 48.8566],
zoom: 12,
speed: 1.6,
curve: 1.2
});
easeTo и
jumpToВсе три метода работают относительно текущего состояния карты. Это означает:
zoom, остальные параметры
сохраняютсяЛюбой новый вызов flyTo, easeTo или
jumpTo немедленно отменяет текущую анимацию.
Это позволяет создавать динамические сценарии:
map.jumpTo({
center: layerCenter,
zoom: 8
});
map.easeTo({
center: feature.geometry.coordinates,
zoom: 14,
duration: 1000
});
map.flyTo({
center: [13.4050, 52.5200],
zoom: 13,
speed: 1.3,
curve: 1.4
});
Если установлены ограничения (maxZoom,
minZoom, maxBounds), методы навигации
учитывают их автоматически:
jumpTo — практически нулевая нагрузкаeaseTo — линейная нагрузка, зависит от
длительностиflyTo — наиболее затратный из-за вычисления
траекторииПри большом количестве частых вызовов рекомендуется:
Во всех методах можно использовать смещение центра:
offset: [100, -50]
Это позволяет:
Навигационные методы часто привязываются к:
click на маркерахlayer)Каждое событие может инициировать один из трёх типов перемещения, в зависимости от требуемого UX: мгновенного, плавного или выразительного.