Управление жестами масштабирования в Google Maps JavaScript API опирается на набор параметров конфигурации объекта карты, которые контролируют поведение пользовательского ввода: прокрутку колесом мыши, жесты на сенсорных экранах, двойной клик и инерционное масштабирование. Гибкая настройка позволяет адаптировать карту под интерфейсы киосков, мобильных приложений, аналитических панелей и встраиваемых виджетов, где стандартное поведение масштабирования может быть нежелательным.
В Google Maps JavaScript API масштабирование карты может быть вызвано несколькими способами:
Каждый из этих каналов ввода управляется отдельными параметрами,
однако ключевую роль в отключении именно жестов играет настройка
gestureHandling, а также дополнительные флаги, связанные с
zoom.
Наиболее радикальный способ отключить любое интерактивное масштабирование через жесты — использование параметра:
gestureHandling: "none"
Данная настройка полностью блокирует:
При этом карта остаётся визуально интерактивной в части отображения, но пользователь теряет возможность изменять масштаб вручную.
Пример конфигурации:
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 48.0196, lng: 66.9237 },
zoom: 6,
gestureHandling: "none"
});
Такой режим применяется в интерфейсах, где карта выполняет исключительно информационную функцию, например в статичных дашбордах или при встраивании в презентационные панели.
Отдельно от жестов сенсорных экранов управляется поведение колеса мыши:
scrollwheel: false
Этот параметр предотвращает изменение масштаба при прокрутке колесом, но не всегда блокирует pinch-жесты на мобильных устройствах.
Пример:
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 48.0196, lng: 66.9237 },
zoom: 6,
scrollwheel: false
});
В современных версиях API поведение scrollwheel частично
перекрывается gestureHandling, поэтому при комбинировании
параметров приоритет обычно отдаётся общей стратегии жестов.
Параметр gestureHandling определяет стратегию
взаимодействия карты с пользовательскими жестами. Он принимает несколько
значений:
Полное отключение жестов масштабирования и перемещения.
gestureHandling: "none"
Жесты масштабирования и перемещения требуют дополнительного действия пользователя (например, удержания клавиши Ctrl или Command на десктопе).
gestureHandling: "cooperative"
Этот режим снижает случайные изменения масштаба при прокрутке страницы.
Все жесты немедленно применяются к карте, без ограничений.
gestureHandling: "greedy"
Используется в полноэкранных картах, где карта является основным элементом интерфейса.
API самостоятельно определяет поведение в зависимости от устройства и окружения.
gestureHandling: "auto"
Часто применяется как значение по умолчанию.
Двойной клик часто используется для увеличения масштаба. Для его отключения применяется:
disableDoubleClickZoom: true
Это предотвращает резкие скачки zoom при взаимодействии с картой мышью.
Пример:
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 48.0196, lng: 66.9237 },
zoom: 6,
disableDoubleClickZoom: true
});
В интерфейсах, где двойной клик используется для других действий (например, добавление маркера или выбор точки), отключение масштабирования является обязательным.
Для полного отключения всех пользовательских способов изменения масштаба обычно комбинируются несколько параметров:
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 48.0196, lng: 66.9237 },
zoom: 6,
gestureHandling: "none",
scrollwheel: false,
disableDoubleClickZoom: true
});
Такая конфигурация блокирует основные механизмы:
Дополнительно может применяться отключение клавиатурного управления:
keyboardShortcuts: false
Это предотвращает изменение масштаба через клавиши + и
-.
На мобильных устройствах основным способом масштабирования является
pinch-to-zoom. Его поведение напрямую зависит от
gestureHandling.
При значении:
none — жесты полностью игнорируютсяcooperative — масштабирование возможно только при
дополнительном взаимодействииgreedy — масштабирование происходит свободноВ условиях мобильных интерфейсов полное отключение масштабирования может привести к снижению удобства навигации, поэтому чаще используется ограничение через cooperative-режим.
Отключение жестов масштабирования существенно меняет модель взаимодействия с картой:
Особенно критично это в случаях, когда карта занимает часть страницы, а не является центральным элементом интерфейса.
Исторически параметр scrollwheel использовался как
основной способ отключения масштабирования через мышь. Однако в
современных реализациях он работает в связке с
gestureHandling.
Типичные сценарии:
scrollwheel: false + gestureHandling: auto
— частичное отключение прокруткиscrollwheel: false +
gestureHandling: greedy — возможны исключения в зависимости
от устройстваgestureHandling: none — полностью перекрывает поведение
scrollwheelТаким образом, gestureHandling имеет более высокий
приоритет.
Даже при отключённых жестах масштабирование остаётся доступным через API:
map.setZoom(10);
или плавное изменение:
map.setOptions({ zoom: 8 });
Это позволяет реализовать контролируемую навигацию через внешние элементы интерфейса: кнопки, ползунки, списки объектов.
При отключении жестов масштабирования часто встречаются следующие проблемы:
scrollwheel: false при активном
pinch-zoomdisableDoubleClickZoom, приводящее к
неожиданным скачкам масштабаgestureHandling: "cooperative"
без учета десктопных сценариевКорректная настройка всегда должна опираться на встроенные параметры API, а не на внешние обработчики событий.
Отключение или ограничение жестов масштабирования применяется в следующих типах интерфейсов:
В таких системах управление масштабом делегируется интерфейсным элементам, а не пользовательским жестам.