С помощью свойства gestureHandling в объекте MapOptions можно контролировать сдвиг и прокручивание карты при её просмотре на мобильном устройстве.
Пример
Следующий пример использует режим обработки жестов cooperative. Просмотрите демонстрационный пример на мобильном устройстве, чтобы увидеть, как работает код.
/**
* This sample sets the gesture handling mode to 'cooperative',
* which means that on a mobile device, the user must swipe with one
* finger to scroll the page and two fingers to pan the map.
*/
function initMap() {
var myLatLng = {lat: -25.363, lng: 131.044};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: myLatLng,
gestureHandling: 'cooperative'
});
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: 'Hello World!'
});
}
<div id="map"></div>
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html, body {
height: 100%;
margin: 0;
padding: 0;
}
<!-- Replace the value of the key parameter with your own API key. --> <script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap"> </script>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Cooperative Gesture Handling</title>
<style>
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html, body {
height: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
/**
* This sample sets the gesture handling mode to 'cooperative',
* which means that on a mobile device, the user must swipe with one
* finger to scroll the page and two fingers to pan the map.
*/
function initMap() {
var myLatLng = {lat: -25.363, lng: 131.044};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: myLatLng,
gestureHandling: 'cooperative'
});
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: 'Hello World!'
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>
</body>
</html>
Обработка жестов
Пользователей мобильного интернета может раздражать, когда при листании вместо прокрутки страницы сдвигается карта.
Google Maps JavaScript API предусматривает свойство gestureHandling в объекте MapOptions, которое можно использовать для того, чтобы сделать взаимодействие пользователей с картой удобнее. Возможные значения:
greedy: Карта всегда сдвигается (вверх или вниз, влево или вправо), когда пользователь листает (перетаскивает) экран. Другими словами, оба варианта пролистывания – как одним пальцем, так и двумя – заставляют карту сдвигаться.cooperative: Пользователь должен листать одним пальцем, чтобы прокручивать страницу, и двумя пальцами – чтобы двигать карту. Когда пользователь листает карту одним пальцем, на карте появляется наложение с подсказкой, сообщающей пользователю, что для смещения карты нужно листать двумя пальцами. См. пример выше на мобильном устройстве, чтобы увидеть, как работает режим cooperative.none: Карта не сдвигается и не масштабируется.auto(по умолчанию): Поведение совпадает с режимомcooperativeлибоgreedy, в зависимости от того, прокручивается ли страница или нет. Более подробно – если свойство установлено какauto, API выбирает следующий режим:cooperative– если тело страницы больше окна или если API не может определить размер страницы (например, если страница находится во встроенном фрейме).greedy– если тело страницы не больше окна, поэтому необходимость в прокрутке является маловероятной.
Значок перехода в полноэкранный режим на мобильных устройствах является видимым по умолчанию, поэтому пользователи могут легко увеличить карту. Когда карта находится в полноэкранном режиме, пользователи могут двигать карту одним или двумя пальцами. Примечание. iOS не поддерживает переход в полноэкранный режим. По этой причине элемент управления для перехода в полноэкранный режим на устройствах iOS не отображается.
События
Когда пользователь прокручивает (перетаскивает) карту, API запускает, помимо прочих, следующие события:
drag: Многократно возникает в процессе перетаскивания карты.dragstart: Возникает, когда пользователь начинает перетаскивать карту.dragend: Возникает, когда пользователь заканчивает перетаскивать карту.
Подробнее см. руководство по событиям и справочную документацию.
Ограничения
К режимам, определяемым свойством gestureHandling, применяются следующие ограничения:
- Только для сенсорных устройств. Свойства
gestureHandlingприменяются только тогда, когда пользователь просматривает страницу на устройстве, которое поддерживает сенсорный интерфейс. - Только для событий касания. Свойства
gestureHandlingне применяются к событиям мыши или стилуса. - Не действуют для карт с включенной регистрацией. Свойства
gestureHandlingне применяются для карт с включенной регистрацией. - Не действуют для Street View. Свойства
gestureHandlingне применяются к службе Street View.
