Я использую API Карт Google (v3), чтобы нарисовать несколько карт на странице. Одна вещь, которую я хотел бы сделать, - отключить масштабирование, когда вы прокручиваете колесико мыши по карте, но я не уверен, как это сделать.
Я отключил scaleControl (т.е. удалил элемент масштабирования UI), но это не предотвращает масштабирование колесика прокрутки.
Вот часть моей функции (это простой плагин jQuery):
$.fn.showMap = function(options, addr){
options = $.extend({
navigationControl: false,
mapTypeControl: false,
scaleControl: false,
draggable: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
}, options);
var map = new google.maps.Map(document.getElementById($(this).attr('id')), options);
// Code cut from this example as not relevant
};
В версии 3 API Карт вы можете просто установить для параметра scrollwheel
значение false в свойствах MapOptions:
options = $.extend({
scrollwheel: false,
navigationControl: false,
mapTypeControl: false,
scaleControl: false,
draggable: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
}, options);
Если вы использовали версию 2 API Карт, вам пришлось бы использовать API-интерфейс
disableDefaultUI: true
может заменить navigationControl: false, mapTypeControl: false, scaleControl: false
код Daniel выполняет работу (спасибо куче!). Но я хотел полностью отключить масштабирование. Я нашел, что мне пришлось использовать все четыре из этих параметров:
{
zoom: 14, // Set the zoom level manually
zoomControl: false,
scaleControl: false,
scrollwheel: false,
disableDoubleClickZoom: true,
...
}
Смотрите: Спецификация объекта MapOptions
На всякий случай вы хотите сделать это динамически;
function enableScrollwheel(map) {
if(map) map.setOptions({ scrollwheel: true });
}
function disableScrollwheel(map) {
if(map) map.setOptions({ scrollwheel: false });
}
Иногда вам нужно показать что-то "сложное" над картой (или карта - небольшая часть макета), и это масштабирование прокрутки попадает посередине, но после того, как у вас есть чистая карта, этот способ масштабирования хороший.
Держите это просто! Исходная переменная Google maps, ничего лишнего.
var mapOptions = {
zoom: 16,
center: myLatlng,
scrollwheel: false
}
Я создал более развитый плагин jQuery, который позволяет вам блокировать или разблокировать карту с помощью приятной кнопки.
Этот плагин отключает iframe Google Maps с прозрачным оверлеем div и добавляет кнопку для разблокировки. Вы должны нажать в течение 650 миллисекунд, чтобы разблокировать его.
Вы можете изменить все параметры для вашего удобства. Проверьте его на https://github.com/diazemiliano/googlemaps-scrollprevent
Вот пример.
(function() {
$(function() {
$("#btn-start").click(function() {
$("iframe[src*='google.com/maps']").scrollprevent({
printLog: true
}).start();
return $("#btn-stop").click(function() {
return $("iframe[src*='google.com/maps']").scrollprevent().stop();
});
});
return $("#btn-start").trigger("click");
});
}).call(this);
.embed-container {
position: relative !important;
padding-bottom: 56.25% !important;
height: 0 !important;
overflow: hidden !important;
max-width: 100% !important;
}
.embed-container iframe {
position: absolute !important;
top: 0 !important;
left: 0 !important;
width: 100% !important;
height: 100% !important;
}
.mapscroll-wrap {
position: static !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/diazemiliano/googlemaps-scrollprevent/v.0.6.5/dist/googlemaps-scrollprevent.min.js"></script>
<div class="embed-container">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d12087.746318586604!2d-71.64614110000001!3d-40.76341959999999!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x9610bf42e48faa93%3A0x205ebc786470b636!2sVilla+la+Angostura%2C+Neuqu%C3%A9n!5e0!3m2!1ses-419!2sar!4v1425058155802"
width="400" height="300" frameborder="0" style="border:0"></iframe>
</div>
<p><a id="btn-start" href="#">"Start Scroll Prevent"</a> <a id="btn-stop" href="#">"Stop Scroll Prevent"</a>
</p>
Edit in JSFiddle Result JavaScript HTML CSS
» частью кода?
На всякий случай вы используете библиотеку GMaps.js, что делает ее немного проще делать такие вещи, как геокодирование и пользовательские контакты, здесь, как вы решаете эту проблему, используя методы, полученные из предыдущих ответов.
var Gmap = new GMaps({
div: '#main-map', // FYI, this setting property used to be 'el'. It didn't need the '#' in older versions
lat: 51.044308,
lng: -114.0630914,
zoom: 15
});
// To access the Native Google Maps object use the .map property
if(Gmap.map) {
// Disabling mouse wheel scroll zooming
Gmap.map.setOptions({ scrollwheel: false });
}
В моем случае решающее значение было установить в 'scrollwheel':false
в init. Примечание. Я использую jQuery UI Map
. Ниже мой CoffeeScript заголовок функции init:
$("#map_canvas").gmap({'scrollwheel':false}).bind "init", (evt, map) ->
Вам просто нужно добавить опции карты:
scrollwheel: false
Для кого-то, кто задается вопросом, как отключить API Google Карт Google
Он будет включать прокрутку масштабирования, если вы нажмете карту один раз. И отключить после выключения мыши из div.
Вот пример
var map;
var element = document.getElementById('map-canvas');
function initMaps() {
map = new google.maps.Map(element , {
zoom: 17,
scrollwheel: false,
center: {
lat: parseFloat(-33.915916),
lng: parseFloat(151.147159)
},
});
}
//START IMPORTANT part
//disable scrolling on a map (smoother UX)
jQuery('.map-container').on("mouseleave", function(){
map.setOptions({ scrollwheel: false });
});
jQuery('.map-container').on("mousedown", function() {
map.setOptions({ scrollwheel: true });
});
//END IMPORTANT part
.big-placeholder {
background-color: #1da261;
height: 300px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<body>
<div class="big-placeholder">
</div>
<!-- START IMPORTANT part -->
<div class="map-container">
<div id="map-canvas" style="min-height: 400px;"></div>
</div>
<!-- END IMPORTANT part-->
<div class="big-placeholder">
</div>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAIjN23OujC_NdFfvX4_AuoGBbkx7aHMf0&callback=initMaps">
</script>
</body>
</html>
На данный момент (октябрь 2017 г.) Google реализовало определенное свойство для обработки масштабирования/прокрутки, называемое gestureHandling
. Его цель - работать с мобильными устройствами, но она также изменяет поведение для настольных браузеров. Здесь из официальная документация:
function initMap() { var locationRio = {lat: -22.915, lng: -43.197}; var map = new google.maps.Map(document.getElementById('map'), { zoom: 13, center: locationRio, gestureHandling: 'none' });
Доступными значениями для gestureHandling являются:
'greedy'
: карта всегда перемещается (вверх или вниз, влево или вправо), когда пользователь выполняет поиск (перетаскивание) экрана. Другими словами, проведите пальцем по одному пальцу и проведите пальцем по двум пальцам, чтобы скопировать карту.'cooperative'
: пользователь должен проведите пальцем одним пальцем, чтобы прокрутить страницу и два пальца, чтобы панорамировать карту. Если пользователь просматривает карту одним пальцем, на карте появляется надпись с подсказкой, в которой пользователю предлагается использовать два пальца для перемещения карты. В настольных приложениях пользователи могут масштабировать или панорамировать карту, прокручивая ее, нажимая клавишу модификатора (клавиша ctrl или ⌘).'none'
: этот параметр отключает панорамирование и сжатие на карте для мобильных устройств и перетаскивание карты на настольные устройства.'auto'
(по умолчанию): в зависимости от того, прокручивается ли страница, API JavaScript для Google Maps устанавливает свойство gestureHandling как'cooperative'
или'greedy'
Короче говоря, вы можете легко заставить параметр "всегда масштабироваться" ('greedy'
), "никогда не масштабироваться" ('none'
), или "пользователь должен нажать CRTL/⌘, чтобы включить масштабирование" ('cooperative'
).
Простое решение:
// DISABLE MOUSE SCROLL IN MAPS
// enable the pointer events only on click;
$('.gmap-wrapper').on('click', function () {
$('.gmap-wrapper iframe').removeClass('scrolloff'); // set the pointer events true on click
});
// you want to disable pointer events when the mouse leave the canvas area;
$(".gmap-wrapper").mouseleave(function () {
$('.gmap-wrapper iframe').addClass('scrolloff'); // set the pointer events to none when mouse leaves the map area
});
.scrolloff{ pointer-events: none; }
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="gmap-wrapper">
<iframe class="scrolloff" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d44754.55736493158!2d9.151166379101554!3d45.486726!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x4786bfca7e8fb1cb%3A0xee8d99c9d153be98!2sCorsidia!5e0!3m2!1sit!2sit!4v1496947992608" width="600" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>
</html>
Источник: https://github.com/Corsidia/scrolloff
Просто, если кто-нибудь заинтересован в чистом решении css для этого. Следующий код накладывает прозрачный div над картой и перемещает прозрачный div позади карты при щелчке. Наложение предотвращает масштабирование, после щелчка и позади карты, масштабирование включено.
Смотрите мой пост в блоге Google maps переключает масштаб с помощью css для объяснения, как это работает, и pen codepen.io/daveybrown/pen/yVryMr для рабочей демонстрации.
Отказ от ответственности: это в основном для обучения и, вероятно, не будет лучшим решением для производственных сайтов.
HTML:
<div class="map-wrap small-11 medium-8 small-centered columns">
<input id="map-input" type="checkbox" />
<label class="map-overlay" for="map-input" class="label" onclick=""></label>
<iframe src="https://www.google.com/maps/embed?pb=!1m14!1m12!1m3!1d19867.208601651986!2d-0.17101002911118332!3d51.50585742500925!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!5e0!3m2!1sen!2suk!4v1482355389969"></iframe>
</div>
CSS
.map-wrap {
position: relative;
overflow: hidden;
height: 180px;
margin-bottom: 10px;
}
#map-input {
opacity: 0;
}
.map-overlay {
display: block;
content: '';
position: absolute;
top: 0;
left: 0;
width: 100% !important;
height: 100% !important;
overflow: hidden;
z-index: 2;
}
#map-input[type=checkbox]:checked ~ iframe {
z-index: 3;
}
#map-input[type=checkbox]:checked ~ .map-overlay {
position: fixed;
top: 0;
left: 0;
width: 100% !important;
height: 100% !important;
}
iframe {
position: absolute;
top: 0;
left: 0;
width: 100% !important;
height: 100% !important;
z-index: 1;
border: none;
}
Я делаю это с помощью этих простых экзаменов
JQuery
$('.map').click(function(){
$(this).find('iframe').addClass('clicked')
}).mouseleave(function(){
$(this).find('iframe').removeClass('clicked')
});
CSS
.map {
width: 100%;
}
.map iframe {
width: 100%;
display: block;
pointer-events: none;
position: relative; /* IE needs a position other than static */
}
.map iframe.clicked {
pointer-events: auto;
}
Или используйте параметры gmap
function init() {
var mapOptions = {
scrollwheel: false,
Используйте этот фрагмент кода, который даст вам весь цвет и управление масштабированием карты google. ( scaleControl: false и scrollwheel: false будет предотвращать увеличение или уменьшение колесика мыши)
function initMap() {
// Styles a map in night mode.
var map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 23.684994, lng: 90.356331},
zoom: 8,
scaleControl: false,
scrollwheel: false,
styles: [
{elementType: 'geometry', stylers: [{color: 'F1F2EC'}]},
{elementType: 'labels.text.stroke', stylers: [{color: '877F74'}]},
{elementType: 'labels.text.fill', stylers: [{color: '877F74'}]},
{
featureType: 'administrative.locality',
elementType: 'labels.text.fill',
stylers: [{color: '#d59563'}]
},
{
featureType: 'poi',
elementType: 'labels.text.fill',
stylers: [{color: '#d59563'}]
},
{
featureType: 'poi.park',
elementType: 'geometry',
stylers: [{color: '#263c3f'}]
},
{
featureType: 'poi.park',
elementType: 'labels.text.fill',
stylers: [{color: '#f77c2b'}]
},
{
featureType: 'road',
elementType: 'geometry',
stylers: [{color: 'F5DAA6'}]
},
{
featureType: 'road',
elementType: 'geometry.stroke',
stylers: [{color: '#212a37'}]
},
{
featureType: 'road',
elementType: 'labels.text.fill',
stylers: [{color: '#f77c2b'}]
},
{
featureType: 'road.highway',
elementType: 'geometry',
stylers: [{color: '#746855'}]
},
{
featureType: 'road.highway',
elementType: 'geometry.stroke',
stylers: [{color: 'F5DAA6'}]
},
{
featureType: 'road.highway',
elementType: 'labels.text.fill',
stylers: [{color: 'F5DAA6'}]
},
{
featureType: 'transit',
elementType: 'geometry',
stylers: [{color: '#2f3948'}]
},
{
featureType: 'transit.station',
elementType: 'labels.text.fill',
stylers: [{color: '#f77c2b3'}]
},
{
featureType: 'water',
elementType: 'geometry',
stylers: [{color: '#0676b6'}]
},
{
featureType: 'water',
elementType: 'labels.text.fill',
stylers: [{color: '#515c6d'}]
},
{
featureType: 'water',
elementType: 'labels.text.stroke',
stylers: [{color: '#17263c'}]
}
]
});
var marker = new google.maps.Marker({
position: {lat: 23.684994, lng: 90.356331},
map: map,
title: 'BANGLADESH'
});
}