FullscreenControl представляет собой встроенный элемент управления, предназначенный для переключения контейнера карты в полноэкранный режим и обратно. Контрол интегрируется в интерфейс карты как стандартный UI-компонент и опирается на Fullscreen API браузера, обеспечивая единообразное поведение на поддерживаемых платформах.
Основная задача FullscreenControl заключается в изменении размера контейнера карты до размеров экрана устройства с последующей синхронизацией состояния карты, чтобы визуализация тайлов, слоёв и взаимодействий оставалась корректной при изменении viewport.
FullscreenControl реализуется как объект, соответствующий интерфейсу
IControl, используемому в Mapbox GL JS. При добавлении на
карту он:
document.fullscreenElementrequestFullscreen() и
exitFullscreen()Контрол не управляет рендерингом карты напрямую. Он лишь изменяет
контейнер, после чего карта автоматически реагирует на изменение
размеров через внутренние механизмы resize().
FullscreenControl добавляется через метод addControl
экземпляра карты.
import mapboxgl from 'mapbox-gl';
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v12',
center: [30.5, 50.5],
zoom: 9
});
map.addControl(new mapboxgl.FullscreenControl());
По умолчанию контрол размещается в правом верхнем углу интерфейса карты.
FullscreenControl принимает объект настроек, позволяющий адаптировать поведение под требования интерфейса.
map.addControl(new mapboxgl.FullscreenControl({
container: document.querySelector('#map-wrapper')
}));
Параметр container определяет элемент DOM, который будет
переводиться в полноэкранный режим. Если не указан, используется
контейнер карты.
FullscreenControl опирается на Fullscreen API, поведение которого отличается в зависимости от реализации браузера:
requestFullscreenВ контексте Mapbox GL JS контроль состояния fullscreen может сопровождаться дополнительными событиями перерасчёта размера карты.
При переходе в полноэкранный режим карта обязана пересчитать свой viewport. FullscreenControl косвенно инициирует этот процесс.
Ключевые моменты:
fullscreenchange отслеживается через
documentmap.resize()document.addEventListener('fullscreenchange', () => {
map.resize();
});
Хотя библиотека часто обрабатывает это самостоятельно, ручной вызов используется при кастомных интеграциях.
FullscreenControl реализует стандартную систему позиционирования контролов:
top-right (по умолчанию)top-leftbottom-rightbottom-leftmap.addControl(new mapboxgl.FullscreenControl(), 'bottom-left');
Позиция влияет только на DOM-размещение кнопки и не изменяет функциональность.
Контрол автоматически переключает иконку в зависимости от состояния:
Состояние определяется через:
document.fullscreenElement
Изменение UI происходит без перерисовки карты, только через DOM-манипуляции.
При использовании кастомных layout-структур важно учитывать, что fullscreen применяется к конкретному DOM-элементу.
Типичные сценарии:
FullscreenControl не изменяет CSS окружения, а лишь переводит указанный контейнер в fullscreen.
Особенности:
FullscreenControl может использоваться совместно с другими стандартными контролами Mapbox GL JS:
Порядок добавления влияет только на визуальную последовательность в UI:
map.addControl(new mapboxgl.NavigationControl());
map.addControl(new mapboxgl.FullscreenControl());
map.addControl(new mapboxgl.ScaleControl());
FullscreenControl можно заменить пользовательской реализацией, если требуется расширенное управление состоянием.
Пример логики кастомного поведения:
class CustomFullscreen {
onAdd(map) {
this.map = map;
this.container = document.createElement('button');
this.container.oncl ick = () => {
if (!document.fullscreenElement) {
map.getContainer().requestFullscreen();
} else {
document.exitFullscreen();
}
};
return this.container;
}
onRemove() {
this.container.remove();
}
}
Такой подход используется при необходимости интеграции с нестандартными UI-фреймворками.
FullscreenControl сам по себе не влияет на производительность, однако переход в fullscreen вызывает:
В Mapbox GL JS это сопровождается автоматическим вызовом
resize, что предотвращает визуальные артефакты.
FullscreenControl не обходит эти ограничения, а лишь использует доступный API браузера.
Если контейнер карты удаляется или заменяется в DOM во время fullscreen-сессии:
Это важно при использовании SPA-фреймворков, где DOM может пересоздаваться без перезагрузки страницы.