Estou trabalhando em um site WordPress, onde os autores geralmente incorporam o Google Maps usando iFrames na maioria das postagens.
Existe uma maneira de desativar o zoom através da roda de rolagem do mouse em todos eles usando Javascript?
Estou trabalhando em um site WordPress, onde os autores geralmente incorporam o Google Maps usando iFrames na maioria das postagens.
Existe uma maneira de desativar o zoom através da roda de rolagem do mouse em todos eles usando Javascript?
Respostas:
Eu estava tendo o mesmo problema: ao rolar a página, o ponteiro fica sobre o mapa, ele começa a ampliar / reduzir o mapa em vez de continuar a rolar a página. :(
Então eu resolvi isso colocando um div
com um .overlay
exatamente antes de cada iframe
inserção do gmap , veja:
<html>
<div class="overlay" onClick="style.pointerEvents='none'"></div>
<iframe src="https://mapsengine.google.com/map/embed?mid=some_map_id" width="640" height="480"></iframe>
</html>
No meu CSS eu criei a classe:
.overlay {
background:transparent;
position:relative;
width:640px;
height:480px; /* your iframe height */
top:480px; /* your iframe height */
margin-top:-480px; /* your iframe height */
}
A div cobrirá o mapa, impedindo que os eventos do ponteiro cheguem a ele. Mas se você clicar na div, ela ficará transparente para apontar eventos, ativando o mapa novamente!
Espero ter ajudado você :)
z-index
para que ele fosse sobreposto corretamente.
Eu tentei a primeira resposta nesta discussão e ela não estava funcionando para mim, não importa o que eu fiz, então criei minha própria solução:
Envolva o iframe com uma classe (.maps neste exemplo) e, idealmente, incorpore o código responsivo: http://embedresponsively.com/ - Altere o CSS do iframe para pointer-events: none
e, em seguida, usando a função click do jQuery para o elemento pai, você pode alterar o iframes css parapointer-events:auto
HTML
<div class='embed-container maps'>
<iframe width='600' height='450' frameborder='0' src='http://foo.com'></iframe>
</div>
CSS
.maps iframe{
pointer-events: none;
}
jQuery
$('.maps').click(function () {
$('.maps iframe').css("pointer-events", "auto");
});
$( ".maps" ).mouseleave(function() {
$('.maps iframe').css("pointer-events", "none");
});
Tenho certeza de que existe uma única maneira de fazer isso no JavaScript, se alguém quiser adicionar a isso, fique à vontade.
A maneira JavaScript de reativar os eventos-ponteiro é bastante simples. Apenas forneça um ID para o iFrame (ou seja, "iframe") e aplique um evento onclick à div cointainer:
onclick="document.getElementById('iframe').style.pointerEvents= 'auto'"
<div class="maps" onclick="document.getElementById('iframe').style.pointerEvents= 'auto'">
<iframe id="iframe" src="" width="100%" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>
pointer-events: none
impedirá qualquer interação com o mapa (arraste, navegação, cliques, etc.).
$(this).find('iframe').css("pointer-events", "auto");
Estendi a solução @nathanielperales.
Abaixo da descrição do comportamento:
Abaixo do código javascript:
// Disable scroll zooming and bind back the click event
var onMapMouseleaveHandler = function (event) {
var that = $(this);
that.on('click', onMapClickHandler);
that.off('mouseleave', onMapMouseleaveHandler);
that.find('iframe').css("pointer-events", "none");
}
var onMapClickHandler = function (event) {
var that = $(this);
// Disable the click handler until the user leaves the map area
that.off('click', onMapClickHandler);
// Enable scrolling zoom
that.find('iframe').css("pointer-events", "auto");
// Handle the mouse leave event
that.on('mouseleave', onMapMouseleaveHandler);
}
// Enable map zooming with mouse scroll when the user clicks the map
$('.maps.embed-container').on('click', onMapClickHandler);
$('.maps.embed-container').find('iframe').css("pointer-events", "none");
Estou reeditando o código escrito por #nathanielperales que realmente funcionou para mim. Simples e fácil de capturar, mas funciona apenas uma vez. Então eu adicionei mouseleave () no JavaScript. Idéia adaptada de #Bogdan E agora é perfeita. Tente isso. Os créditos vão para #nathanielperales e #Bogdan. Acabei de combinar as duas ideias. Obrigado pessoal. Espero que isso ajude outros também ...
HTML
<div class='embed-container maps'>
<iframe width='600' height='450' frameborder='0' src='http://foo.com'> </iframe>
</div>
CSS
.maps iframe{
pointer-events: none;
}
jQuery
$('.maps').click(function () {
$('.maps iframe').css("pointer-events", "auto");
});
$( ".maps" ).mouseleave(function() {
$('.maps iframe').css("pointer-events", "none");
});
Improvisar - Adaptar - Superar
E aqui está um exemplo do jsFiddle.
pointer-events: auto
somente depois que o mouse "pairar" sobre o mapa por um determinado período? ou seja, inicie o timer quando o mouse entrar no iframe e redefina-o quando o mouse sair. Se o timer atingir X milissegundos, mude para pointer-events: auto
. E sempre que o mouse sair do iframe, você apenas voltará para pointer-events: none
.
Sim, é bem fácil. Eu enfrentei um problema semelhante. Apenas adicione a propriedade css "pointer-events" à div iframe e defina-a como 'none' .
Exemplo: <iframe style = "eventos-ponteiro: nenhum" src = ........>
Nota: Essa correção desabilitaria todos os outros eventos do mouse no mapa. Funcionou para mim, pois não exigimos nenhuma interação do usuário no mapa.
Depois de fazer algumas pesquisas, você tem 2 opções. Como os novos mapas da API com iframe embed parecem não suportar a desativação da roda do mouse.
O primeiro seria usar mapas antigos do Google ( https://support.google.com/maps/answer/3045828?hl=pt-BR ).
O segundo seria criar uma função javascript para simplificar a incorporação de um mapa para cada comentário e usar parâmetros (é um código de exemplo apenas para apontar a localização e não mostrar a solução exata)
function createMap(containerid, parameters) {
var mymap = document.getElementById(containerid),
map_options = {
zoom: 13,
scrollwheel: false,
/* rest of options */
},
map = new google.maps.Map(mymap, map_options);
/* 'rest of code' to take parameters into account */
}
Existe uma solução incrível e fácil.
Você precisa adicionar uma classe personalizada em seu css que defina os eventos do ponteiro para mapear a tela como nenhum:
.scrolloff{
pointer-events: none;
}
Em seguida, com o jQuery, você pode adicionar e remover essa classe com base em diferentes eventos, por exemplo:
$( document ).ready(function() {
// you want to enable the pointer events only on click;
$('#map_canvas').addClass('scrolloff'); // set the pointer events to none on doc ready
$('#canvas').on('click', function() {
$('#map_canvas').removeClass('scrolloff'); // set the pointer events true on click
});
// you want to disable pointer events when the mouse leave the canvas area;
$( "#map_canvas" ).mouseleave(function() {
$('#map_canvas').addClass('scrolloff'); // set the pointer events to none when mouse leaves the map area
});
});
Eu criei um exemplo no jsfiddle , espero que ajude!
Acabei de registrar uma conta no site developers.google.com e recebo um token para chamar uma API do Google Maps e apenas desativo assim (scrollwheel: false):
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('container_google_maps'), {
center: {lat: -34.397, lng: 150.644},
zoom: 8,
scrollwheel: false
});
}
Esta é a minha abordagem. Acho fácil de implementar em vários sites e usá-lo o tempo todo
CSS e JavaScript:
<style type="text/css">
.scrolloff iframe {
pointer-events: none ;
}
</style>
<script type="text/javascript">
function scrollOn() {
$('#map').removeClass('scrolloff'); // set the pointer events true on click
}
function scrollOff() {
$('#map').addClass('scrolloff');
}
</script>
No HTML, você desejará agrupar o iframe em uma div.
<div id="map" class="scrolloff" onclick="scrollOn()" onmouseleave="scrollOff()" >
function scrollOn() {
$('#map').removeClass('scrolloff'); // set the pointer events true on click
}
function scrollOff() {
$('#map').addClass('scrolloff'); // set the pointer events true on click
}
.scrolloff iframe {
pointer-events: none ;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="map" class="scrolloff" onclick="scrollOn()" onmouseleave="scrollOff()" ><iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d23845.03946309692!2d-70.0451736316453!3d41.66373705082399!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x89fb159980380d21%3A0x78c040f807017e30!2sChatham+Tides!5e0!3m2!1sen!2sus!4v1452964723177" width="100%" height="450" frameborder="0" style="border:0" allowfullscreen></iframe></div>
Espero que isso ajude quem procura uma solução simples.
Aqui está uma solução simples. Basta definir o pointer-events: none
CSS como <iframe>
para desativar a rolagem do mouse.
<div id="gmap-holder">
<iframe width="100%" height="400" frameborder="0" style="border:0; pointer-events:none"
src="https://www.google.com/maps/embed/v1/place?q=XXX&key=YYY"></iframe>
</div>
Se você desejar que a rolagem do mouse seja ativada quando o usuário clicar no mapa, use o seguinte código JS. Também desabilitará a rolagem do mouse novamente, quando o mouse sair do mapa.
$(function() {
$('#gmap-holder').click(function(e) {
$(this).find('iframe').css('pointer-events', 'all');
}).mouseleave(function(e) {
$(this).find('iframe').css('pointer-events', 'none');
});
})
Para desativar o zoom da roda de rolagem do mouse no Google Maps incorporado, basta definir o ponteiro-eventos da propriedade css do iframe como nenhum:
<style>
#googlemap iframe {
pointer-events:none;
}
</style>
Isso é tudo. Muito legal né?
<div id="googlemap">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3648.6714814904954!2d90.40069809681577!3d23.865796688563787!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3755c425897f1f09%3A0x2bdfa71343f07395!2sArcadia+Green+Point%2C+Rd+No.+16%2C+Dhaka+1230%2C+Bangladesh!5e0!3m2!1sen!2sin!4v1442184916780" width="400" height="300" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>
Bem, para mim a melhor solução foi simplesmente usar assim:
HTML:
<div id="google-maps">
<iframe frameborder="0" height="450" src="***embed-map***" width="100"</iframe>
</div>
CSS:
#google-maps iframe { pointer-events:none; }
JS:
<script>
$(function() {
$('#google-maps').click(function(e) {
$(this).find('iframe').css('pointer-events', 'auto');
}).mouseleave(function(e) {
$(this).find('iframe').css('pointer-events', 'none');
});
})
</script>
Considerações:
O melhor seria adicionar uma sobreposição com uma transparência mais escura com um texto: " Clique para navegar " quando a roda do mouse estiver desativada. Mas quando for ativada (após você clicar nela), a transparência com o texto desaparecerá e o usuário poderá navegar o mapa conforme o esperado. Alguma pista de como fazer isso?
A maneira mais simples de fazer isso é usando um pseudo-elemento como :before
ou :after
.
Este método não exigirá nenhum elemento html ou jquery adicional.
Se temos, por exemplo, essa estrutura html:
<div class="map_wraper">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d405689.7826944034!2d-122.04109805!3d37.40280355!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x808fb68ad0cfc739%3A0x7eb356b66bd4b50e!2sSilicon+Valley%2C+CA!5e0!3m2!1sen!2sro!4v1438864791455" width="600" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>
Então, tudo o que precisamos fazer é tornar o wrapper relativo ao pseudo-elemento que criaremos para impedir a rolagem
.map_wraper{
position:relative;
}
Depois disso, criaremos o pseudoelemento que será posicionado sobre o mapa, impedindo a rolagem:
.map_wraper:after{
background: none;
content: " ";
display: inline-block;
font-size: 0;
height: 100%;
left: 0;
opacity: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 9;
}
E pronto, sem jquery, sem elementos extras em html! Aqui está um exemplo jsfiddle de trabalho: http://jsfiddle.net/e6j4Lbe1/
Aqui está a minha solução simples.
Coloque seu iframe em uma div com uma classe chamada "mapas", por exemplo.
Este será o CSS para o seu iframe
.maps iframe { pointer-events: none }
E aqui está um pequeno javascript que definirá a propriedade pointer-events do iframe como "auto" quando você passar o mouse pelo elemento div por pelo menos 1 segundo (funciona melhor para mim - defina o que quiser) e limpe o tempo limite / defina-o como "none" novamente quando o mouse sair do elemento.
var maptimer;
$(".maps").hover(function(){
maptimer = setTimeout(function(){
$(".maps").find("iframe").css("pointer-events", "auto");
},1000);
},function(){
clearTimeout(maptimer);
$(".maps").find("iframe").css("pointer-events", "none");
});
Felicidades.
Eu criei um plugin jQuery muito simples para resolver o problema. Confira em https://diazemiliano.github.io/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);
Edit in JSFiddle Result JavaScript HTML CSS .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>
Usando resposta de @nathanielperales, eu adicionei a função de foco, porque para mim funciona melhor quando o usuário perde o foco no mapa para parar de rolar novamente :)
$(function(){
$('.mapa').hover(function(){
stopScroll();},
function () {
$('.mapa iframe').css("pointer-events", "none");
});
});
function stopScroll(){
$('.mapa').click(function () {
$('.mapa iframe').css("pointer-events", "auto");
});
}
Variações sobre um tema: uma solução simples com jQuery, sem necessidade de edição CSS.
// make iframe active on click, disable on mouseleave
$('iframe.google_map').each( function(i, iframe) {
$(iframe).parent().hover( // make inactive on hover
function() { $(iframe).css('pointer-events', 'none');
}).click( // activate on click
function() { $(iframe).css('pointer-events', 'auto');
}).trigger('mouseover'); // make it inactive by default as well
});
O ouvinte em foco é anexado ao elemento pai, portanto, se o pai atual for maior, você pode simplesmente envolver o iframe com uma div antes da terceira linha.
Espero que seja útil para alguém.
Eu me deparei com esse problema e usei algumas mashup de duas respostas muito úteis sobre essa questão: resposta de czerasz e massa .
Ambos têm muita verdade, mas em algum lugar nos meus testes, descobri que um não funcionava para dispositivos móveis e tinha um suporte ruim para o IE (funciona apenas no IE11). Esta é a solução de nathanielperales, depois estendida por czerasz, que depende de css de eventos de ponteiros e que não funciona em dispositivos móveis (não há ponteiros em dispositivos móveis) e não funciona em nenhuma versão do IE que não seja v11 . Normalmente, eu não me importaria menos, mas há muitos usuários por aí e queremos uma funcionalidade consistente, então fui com a solução de sobreposição, usando um wrapper para facilitar a codificação.
Então, minha marcação fica assim:
<div class="map embed-container">
<div id="map-notice" style="display: block;"> {Tell your users what to do!} </div>
<div class="map-overlay" style="display: block;"></div>
<iframe style="width:100%" src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d3785.684302567802!2d-66.15578327375803!3d18.40721382009222!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x8c036a35d02b013f%3A0x5962cad95b9ec7f8!2sPlaza+Del+Sol!5e0!3m2!1sen!2spr!4v1415284687548" width="633" height="461" frameborder="0"></iframe>
</div>
Então os estilos são assim:
.map.embed-container {
position:relative;
}
.map.embed-container #map-notice{
position:absolute;
right:0;
top:0;
background-color:rgb(100,100,100);/*for old IE browsers with no support for rgba()*/
background-color: rgba(0,0,0,.50);
color: #ccc;
padding: 8px;
}
.map.embed-container .map-overlay{
height:100%;
width:100%;
position:absolute;
z-index:9999;
background-color:rgba(0,0,0,0.10);/*should be transparent but this will help you see where the overlay is going in relation with the markup*/
}
Por fim, o script:
//using jquery...
var onMapMouseleaveHandler = function (event) {
$('#map-notice').fadeIn(500);
var elemento = $$(this);
elemento.on('click', onMapClickHandler);
elemento.off('mouseleave', onMapMouseleaveHandler);
$('.map-overlay').fadeIn(500);
}
var onMapClickHandler = function (event) {
$('#map-notice').fadeOut(500);
var elemento = $$(this);
elemento.off('click', onMapClickHandler);
$('.map-overlay').fadeOut(500);
elemento.on('mouseleave', onMapMouseleaveHandler);
}
$('.map.embed-container').on('click', onMapClickHandler);
Também adicionei minha solução testada em uma essência do GitHub , se você quiser obter coisas de lá ...
Esta é uma solução com CSS e Javascript (ou seja, Jquery, mas também funciona com Javascript puro). Ao mesmo tempo, o mapa é responsivo. Evite ampliar o mapa ao rolar, mas o mapa pode ser ativado clicando nele.
Javascript HTML / JQuery
<div id="map" onclick="$('#googlemap').css('pointerEvents','auto'); return true;">
<iframe id="googlemap" src="http://your-embed-url" height="350"></iframe>
</div>
CSS
#map {
position: relative;
padding-bottom: 36%; /* 16:9 ratio for responsive */
height: 0;
overflow: hidden;
background:transparent; /* does the trick */
z-index:98; /* does the trick */
}
#map iframe {
pointer-events:none; /* does the trick */
position: absolute;
top: 0;
left: 0;
width: 100% !important;
height: 100% !important;
z-index:97; /* does the trick */
}
Diverta-se !
No Google Maps v3, agora você pode desativar a rolagem para aumentar o zoom, o que leva a uma experiência do usuário muito melhor. Outras funções do mapa ainda funcionarão e você não precisa de divs extras. Também achei que deveria haver algum feedback para o usuário, para que ele possa ver quando a rolagem está ativada, então adicionei uma borda do mapa.
// map is the google maps object, '#map' is the jquery selector
preventAccidentalZoom(map, '#map');
// Disables and enables scroll to zoom as appropriate. Also
// gives the user a UI cue as to when scrolling is enabled.
function preventAccidentalZoom(map, mapSelector){
var mapElement = $(mapSelector);
// Disable the scroll wheel by default
map.setOptions({ scrollwheel: false })
// Enable scroll to zoom when there is a mouse down on the map.
// This allows for a click and drag to also enable the map
mapElement.on('mousedown', function () {
map.setOptions({ scrollwheel: true });
mapElement.css('border', '1px solid blue')
});
// Disable scroll to zoom when the mouse leaves the map.
mapElement.mouseleave(function () {
map.setOptions({ scrollwheel: false })
mapElement.css('border', 'none')
});
};
Isso fornecerá um mapa do Google responsivo que interromperá a rolagem no iframe, mas uma vez clicado, você poderá ampliar.
Copie e cole isso no seu html, mas substitua o link iframe pelo seu. Ele é um artigo sobre isso com um exemplo: desative o zoom da roda de rolagem do mouse nos iframes incorporados do Google Map
<style>
.overlay {
background:transparent;
position:relative;
width:100%; /* your iframe width */
height:480px; /* your iframe height */
top:480px; /* your iframe height */
margin-top:-480px; /* your iframe height */
}
</style>
<div class="overlay" onClick="style.pointerEvents='none'"></div>
<iframe src="https://mapsengine.google.com/map/embed?mid=some_map_id" width="100%" height="480"></iframe>
Aqui seria a minha abordagem para isso.
Coloque isso no meu arquivo main.js ou semelhante:
// Create an array of styles.
var styles = [
{
stylers: [
{ saturation: -300 }
]
},{
featureType: 'road',
elementType: 'geometry',
stylers: [
{ hue: "#16a085" },
{ visibility: 'simplified' }
]
},{
featureType: 'road',
elementType: 'labels',
stylers: [
{ visibility: 'off' }
]
}
],
// Lagitute and longitude for your location goes here
lat = -7.79722,
lng = 110.36880,
// Create a new StyledMapType object, passing it the array of styles,
// as well as the name to be displayed on the map type control.
customMap = new google.maps.StyledMapType(styles,
{name: 'Styled Map'}),
// Create a map object, and include the MapTypeId to add
// to the map type control.
mapOptions = {
zoom: 12,
scrollwheel: false,
center: new google.maps.LatLng( lat, lng ),
mapTypeControlOptions: {
mapTypeIds: [google.maps.MapTypeId.ROADMAP],
}
},
map = new google.maps.Map(document.getElementById('map'), mapOptions),
myLatlng = new google.maps.LatLng( lat, lng ),
marker = new google.maps.Marker({
position: myLatlng,
map: map,
icon: "images/marker.png"
});
//Associate the styled map with the MapTypeId and set it to display.
map.mapTypes.set('map_style', customMap);
map.setMapTypeId('map_style');
Em seguida, basta inserir uma div vazia onde deseja que o mapa apareça na sua página.
<div id="map"></div>
Obviamente, você também precisará acessar a API do Google Maps. Eu simplesmente criei um arquivo chamado mapi.js e o joguei na minha pasta / js. Este arquivo precisa ser chamado antes do javascript acima.
`window.google = window.google || {};
google.maps = google.maps || {};
(function() {
function getScript(src) {
document.write('<' + 'script src="' + src + '"' +
' type="text/javascript"><' + '/script>');
}
var modules = google.maps.modules = {};
google.maps.__gjsload__ = function(name, text) {
modules[name] = text;
};
google.maps.Load = function(apiLoad) {
delete google.maps.Load;
apiLoad([0.009999999776482582,[[["http://mt0.googleapis.com/vt?lyrs=m@228000000\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=m@228000000\u0026src=api\u0026hl=en-US\u0026"],null,null,null,null,"m@228000000"],[["http://khm0.googleapis.com/kh?v=135\u0026hl=en-US\u0026","http://khm1.googleapis.com/kh?v=135\u0026hl=en-US\u0026"],null,null,null,1,"135"],[["http://mt0.googleapis.com/vt?lyrs=h@228000000\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=h@228000000\u0026src=api\u0026hl=en-US\u0026"],null,null,null,null,"h@228000000"],[["http://mt0.googleapis.com/vt?lyrs=t@131,r@228000000\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=t@131,r@228000000\u0026src=api\u0026hl=en-US\u0026"],null,null,null,null,"t@131,r@228000000"],null,null,[["http://cbk0.googleapis.com/cbk?","http://cbk1.googleapis.com/cbk?"]],[["http://khm0.googleapis.com/kh?v=80\u0026hl=en-US\u0026","http://khm1.googleapis.com/kh?v=80\u0026hl=en-US\u0026"],null,null,null,null,"80"],[["http://mt0.googleapis.com/mapslt?hl=en-US\u0026","http://mt1.googleapis.com/mapslt?hl=en-US\u0026"]],[["http://mt0.googleapis.com/mapslt/ft?hl=en-US\u0026","http://mt1.googleapis.com/mapslt/ft?hl=en-US\u0026"]],[["http://mt0.googleapis.com/vt?hl=en-US\u0026","http://mt1.googleapis.com/vt?hl=en-US\u0026"]],[["http://mt0.googleapis.com/mapslt/loom?hl=en-US\u0026","http://mt1.googleapis.com/mapslt/loom?hl=en-US\u0026"]],[["https://mts0.googleapis.com/mapslt?hl=en-US\u0026","https://mts1.googleapis.com/mapslt?hl=en-US\u0026"]],[["https://mts0.googleapis.com/mapslt/ft?hl=en-US\u0026","https://mts1.googleapis.com/mapslt/ft?hl=en-US\u0026"]]],["en-US","US",null,0,null,null,"http://maps.gstatic.com/mapfiles/","http://csi.gstatic.com","https://maps.googleapis.com","http://maps.googleapis.com"],["http://maps.gstatic.com/intl/en_us/mapfiles/api-3/14/0","3.14.0"],[2635921922],1,null,null,null,null,0,"",null,null,0,"http://khm.googleapis.com/mz?v=135\u0026",null,"https://earthbuilder.googleapis.com","https://earthbuilder.googleapis.com",null,"http://mt.googleapis.com/vt/icon",[["http://mt0.googleapis.com/vt","http://mt1.googleapis.com/vt"],["https://mts0.googleapis.com/vt","https://mts1.googleapis.com/vt"],[null,[[0,"m",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[47],[37,[["smartmaps"]]]]],0],[null,[[0,"m",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[47],[37,[["smartmaps"]]]]],3],[null,[[0,"h",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[50],[37,[["smartmaps"]]]]],0],[null,[[0,"h",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[50],[37,[["smartmaps"]]]]],3],[null,[[4,"t",131],[0,"r",131000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[5],[37,[["smartmaps"]]]]],0],[null,[[4,"t",131],[0,"r",131000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[5],[37,[["smartmaps"]]]]],3],[null,null,[null,"en-US","US",null,18],0],[null,null,[null,"en-US","US",null,18],3],[null,null,[null,"en-US","US",null,18],6],[null,null,[null,"en-US","US",null,18],0]]], loadScriptTime);
};
var loadScriptTime = (new Date).getTime();
getScript("http://maps.gstatic.com/intl/en_us/mapfiles/api-3/14/0/main.js");
})();`
Quando você chama o arquivo mapi.js, certifique-se de passar o atributo false do sensor.
ou seja: <script type="text/javascript" src="js/mapi.js?sensor=false"></script>
A nova versão 3 da API requer a inclusão do sensor por algum motivo. Certifique-se de incluir o arquivo mapi.js antes do arquivo main.js.
Para o google maps v2 - GMap2:
ar map = new GMap2(document.getElementById("google_map"));
map.disableScrollWheelZoom();
se você tiver um iframe usando a API incorporada do mapa do Google como esta:
<iframe width="320" height="400" frameborder="0" src="https://www.google.com/maps/embed/v1/place?q=Cagli ... "></iframe>
você pode adicionar este estilo css: pointer-event: none; ES
<iframe width="320" height="400" frameborder="0" style="pointer-event:none;" src="https://www.google.com/maps/embed/v1/place?q=Cagli ... "></iframe>
Aqui está minha opinião sobre a resposta @nathanielperales estendida por @chams, agora estendida novamente por mim.
HTML
<div class='embed-container maps'>
<iframe width='600' height='450' frameborder='0' src='http://foo.com'></iframe>
</div>
jQuery
// we're doing so much with jQuery already, might as well set the initial state
$('.maps iframe').css("pointer-events", "none");
// as a safety, allow pointer events on click
$('.maps').click(function() {
$(this).find('iframe').css("pointer-events", "auto");
});
$('.maps').mouseleave(function() {
// set the default again on mouse out - disallow pointer events
$(this).find('iframe').css("pointer-events", "none");
// unset the comparison data so it doesn't effect things when you enter again
$(this).removeData('oldmousepos');
});
$('.maps').bind('mousemove', function(e){
$this = $(this);
// check the current mouse X position
$this.data('mousepos', e.pageX);
// set the comparison data if it's null or undefined
if ($this.data('oldmousepos') == null) {
$this.data('oldmousepos', $this.data('mousepos'));
}
setTimeout(function(){
// some left/right movement - allow pointer events
if ($this.data('oldmousepos') != $this.data('mousepos')) {
$this.find('iframe').css("pointer-events", "auto");
}
// set the compairison variable
$this.data('oldmousepos', $this.data('mousepos'));
}, 300);
console.log($this.data('oldmousepos')+ ' ' + $this.data('mousepos'));
});
O mais simples :
<div id="myIframe" style="width:640px; height:480px;">
<div style="background:transparent; position:absolute; z-index:1; width:100%; height:100%; cursor:pointer;" onClick="style.pointerEvents='none'"></div>
<iframe src="https://www.google.com/maps/d/embed?mid=XXXXXXXXXXXXXX" style="width:640px; height:480px;"></iframe>
</div>
Adicione isso ao seu script:
function initMap() {
var uluru = {lat: -25.363, lng: 131.044};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 12,
center: uluru,
scrollwheel: false,
disableDefaultUI: true,
disableDoubleClickZoom: true
});
var marker = new google.maps.Marker({
position: uluru,
map: map
});
}
Aqui está minha solução para o problema: eu estava construindo um site WP, então há um pouco de código php aqui. Mas a chave está scrollwheel: false,
no objeto do mapa.
function initMap() {
var uluru = {lat: <?php echo $latitude; ?>, lng: <?php echo $Longitude; ?>};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 18,
scrollwheel: false,
center: uluru
});
var marker = new google.maps.Marker({
position: uluru,
map: map
});
}
Espero que isso ajude. Felicidades
scrollwheel
parafalse
.