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?
google-maps
scrollwheel
holiveira
fonte
fonte
scrollwheel
parafalse
.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 cadaiframe
inserção do gmap , veja:No meu CSS eu criei a classe:
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ê :)
fonte
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
CSS
jQuery
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:
fonte
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:
E aqui está um exemplo do jsFiddle .
fonte
$('.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
CSS
jQuery
Improvisar - Adaptar - Superar
E aqui está um exemplo do jsFiddle.
fonte
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 parapointer-events: auto
. E sempre que o mouse sair do iframe, você apenas voltará parapointer-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.
fonte
fonte
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)
fonte
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:
Em seguida, com o jQuery, você pode adicionar e remover essa classe com base em diferentes eventos, por exemplo:
Eu criei um exemplo no jsfiddle , espero que ajude!
fonte
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):
fonte
Esta é a minha abordagem. Acho fácil de implementar em vários sites e usá-lo o tempo todo
CSS e JavaScript:
No HTML, você desejará agrupar o iframe em uma div.
<div id="map" class="scrolloff" onclick="scrollOn()" onmouseleave="scrollOff()" >
Espero que isso ajude quem procura uma solução simples.
fonte
Aqui está uma solução simples. Basta definir o
pointer-events: none
CSS como<iframe>
para desativar a rolagem do mouse.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.
fonte
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:
Isso é tudo. Muito legal né?
fonte
Bem, para mim a melhor solução foi simplesmente usar assim:
HTML:
CSS:
JS:
RESULTADO
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?
fonte
Adicione estilo a
pointer-events:none;
este bom trabalhofonte
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:
Então, tudo o que precisamos fazer é tornar o wrapper relativo ao pseudo-elemento que criaremos para impedir a rolagem
Depois disso, criaremos o pseudoelemento que será posicionado sobre o mapa, impedindo a rolagem:
E pronto, sem jquery, sem elementos extras em html! Aqui está um exemplo jsfiddle de trabalho: http://jsfiddle.net/e6j4Lbe1/
fonte
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
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.
Felicidades.
fonte
Eu criei um plugin jQuery muito simples para resolver o problema. Confira em https://diazemiliano.github.io/googlemaps-scrollprevent
fonte
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 :)
fonte
Variações sobre um tema: uma solução simples com jQuery, sem necessidade de edição CSS.
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.
fonte
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:
Então os estilos são assim:
Por fim, o script:
Também adicionei minha solução testada em uma essência do GitHub , se você quiser obter coisas de lá ...
fonte
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
CSS
Diverta-se !
fonte
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.
fonte
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
fonte
Aqui seria a minha abordagem para isso.
Coloque isso no meu arquivo main.js ou semelhante:
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.
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.
fonte
Para o google maps v2 - GMap2:
fonte
se você tiver um iframe usando a API incorporada do mapa do Google como esta:
você pode adicionar este estilo css: pointer-event: none; ES
fonte
Aqui está minha opinião sobre a resposta @nathanielperales estendida por @chams, agora estendida novamente por mim.
HTML
jQuery
fonte
O mais simples :
fonte
Adicione isso ao seu script:
fonte
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.Espero que isso ajude. Felicidades
fonte