Estoy trabajando en un sitio de WordPress donde los autores usualmente insertan Google Maps usando iFrames en la mayoría de las publicaciones.
¿Hay alguna manera de desactivar el zoom a través de la rueda de desplazamiento del mouse en todos ellos usando Javascript?
google-maps
scrollwheel
holiveira
fuente
fuente
scrollwheel
enfalse
.Respuestas:
Estaba teniendo el mismo problema: al desplazar la página, el puntero se vuelve sobre el mapa, comienza a acercar / alejar el mapa en lugar de continuar desplazándolo. :(
Así que resolví esto poniendo un
div
con.overlay
exactamente antes de cadaiframe
inserción de gmap , vea:En mi CSS creé la clase:
El div cubrirá el mapa, evitando que los eventos de puntero lleguen a él. Pero si hace clic en el div, se vuelve transparente para los eventos de puntero, ¡activando el mapa nuevamente!
Espero que te ayuden :)
fuente
z-index
embargo, en mi caso, tuve que especificar un para que se superponga correctamente.Intenté la primera respuesta en esta discusión y no funcionó para mí, no importa lo que hice, así que se me ocurrió mi propia solución:
Envuelva el iframe con una clase (.maps en este ejemplo) e idealmente incruste el código de respuesta: http://embedresponsively.com/ - Cambie el CSS del iframe
pointer-events: none
y luego use la función de clic de jQuery para el elemento padre. Puede cambiar los iframes css apointer-events:auto
HTML
CSS
jQuery
Estoy seguro de que hay una única forma de JavaScript para hacerlo, si alguien quiere agregar a esto, siéntase libre.
La forma de JavaScript para reactivar los eventos de puntero es bastante simple. Simplemente asigne un Id al iFrame (es decir, "iframe"), luego aplique un evento onclick al cointainer div:
fuente
pointer-events: none
evitará cualquier interacción con el mapa (arrastre, navegación, clics, etc.).$(this).find('iframe').css("pointer-events", "auto");
Extendí la solución @nathanielperales.
Debajo de la descripción del comportamiento:
Debajo del código javascript:
Y aquí hay un ejemplo de jsFiddle .
fuente
$('.maps.embed-container').find('iframe').css("pointer-events", "none");
Estoy reeditando el código escrito por #nathanielperales, realmente funcionó para mí. Simple y fácil de atrapar, pero funciona solo una vez. Entonces agregué mouseleave () en JavaScript. Idea adaptada de #Bogdan Y ahora es perfecta. Prueba esto. Los créditos van a #nathanielperales y #Bogdan. Acabo de combinar ambas ideas. Gracias chicos. Espero que esto ayude a otros también ...
HTML
CSS
jQuery
Improvisa adáptate supérate
Y aquí hay un ejemplo de jsFiddle.
fuente
pointer-events: auto
solo después de que el mouse se haya "deslizado" sobre el mapa durante una cierta duración? es decir, iniciar el temporizador cuando el mouse ingrese al iframe y restablecerlo cuando el mouse se vaya. Si el temporizador llega a X milisegundos, cambie apointer-events: auto
. Y cada vez que el mouse abandone el iframe, simplemente vuelva a cambiarpointer-events: none
.Sí, es bastante fácil. Me enfrenté a un problema similar. Simplemente agregue la propiedad css "pointer-events" al iframe div y configúrelo en 'none' .
Ejemplo: <iframe style = "pointer-events: none" src = ........>
Nota al margen: esta solución deshabilitaría todos los demás eventos del mouse en el mapa. Funcionó para mí ya que no requerimos ninguna interacción del usuario en el mapa.
fuente
fuente
Después de investigar un poco, tienes 2 opciones. Dado que los nuevos mapas api con incrustación de iframe no parecen admitir la desactivación de la rueda del mouse.
Primero usaría mapas de Google antiguos ( https://support.google.com/maps/answer/3045828?hl=en ).
El segundo sería crear una función de JavaScript para simplificar la incorporación de un mapa para cada comentario y usar parámetros (es un código de muestra solo para señalar la ubicación y no mostrar la solución exacta)
fuente
Hay una solución increíble y fácil.
Debe agregar una clase personalizada en su CSS que establezca los eventos de puntero para asignar el lienzo a ninguno:
Luego, con jQuery, puede agregar y eliminar esa clase en función de diferentes eventos, por ejemplo:
He creado un ejemplo en jsfiddle , ¡espero que ayude!
fuente
Solo registro una cuenta en developers.google.com y obtengo un token para llamar a una API de Maps, y simplemente lo deshabilito así (scrollwheel: false):
fuente
Este es mi enfoque. Me resulta fácil de implementar en varios sitios web y usarlo todo el tiempo
CSS y JavaScript:
En el HTML, querrá envolver el iframe en un div.
<div id="map" class="scrolloff" onclick="scrollOn()" onmouseleave="scrollOff()" >
Espero que esto ayude a cualquiera que busque una solución simple.
fuente
Aquí hay una solución simple. Simplemente configure el
pointer-events: none
CSS<iframe>
para desactivar el desplazamiento del mouse.Si desea que el desplazamiento del mouse se active cuando el usuario hace clic en el mapa, utilice el siguiente código JS. También deshabilitará el desplazamiento del mouse nuevamente, cuando el mouse se mueva fuera del mapa.
fuente
Para deshabilitar el zoom de la rueda de desplazamiento del mouse en Google Maps incrustado, solo necesita establecer los eventos de puntero de propiedad css del iframe en none:
Eso es todo .. Bastante bien, ¿eh?
fuente
Bueno, para mí la mejor solución era simplemente usar así:
HTML:
CSS:
JS:
RESULTADO
Consideraciones:
Lo mejor sería agregar una superposición con una transparencia más oscura con un texto: " Hacer clic para navegar " cuando la rueda del mouse está desactivada Pero cuando se activa (después de hacer clic en ella), la transparencia con el texto desaparecería y el usuario podría navegar El mapa como se esperaba. ¿Alguna pista de cómo hacer eso?
fuente
Agregue estilo,
pointer-events:none;
esto funciona bienfuente
La forma más sencilla de hacerlo es mediante el uso de un pseudo-elemento como
:before
o:after
.Este método no requerirá elementos html o jquery adicionales.
Si tenemos, por ejemplo, esta estructura html:
Entonces todo lo que tenemos que hacer es hacer el envoltorio relativo al pseudo-elemento que crearemos para evitar el desplazamiento
Después de esto, crearemos el pseudo-elemento que se colocará sobre el mapa para evitar el desplazamiento:
Y ya está, ¡no jquery ni elementos html adicionales! Aquí hay un ejemplo de jsfiddle que funciona: http://jsfiddle.net/e6j4Lbe1/
fuente
Aquí está mi solución simple.
Pon tu iframe en un div con una clase llamada "mapas" por ejemplo.
Este será el CSS para su iframe
Y aquí hay un pequeño javascript que establecerá la propiedad de eventos de puntero del iframe en "auto" cuando coloque el elemento div durante al menos 1 segundo (funciona mejor para mí, configúrelo como desee) y borra el tiempo de espera / configúrelo en "none" nuevamente cuando el mouse abandone el elemento.
Salud.
fuente
He creado un complemento jQuery muy simple para resolver el problema. Compruébelo en https://diazemiliano.github.io/googlemaps-scrollprevent
fuente
Utilizando la respuesta de @nathanielperales, agregué la función de desplazamiento porque para mí funciona mejor cuando el usuario pierde el foco en el mapa para dejar de desplazarse nuevamente :)
fuente
Variaciones sobre un tema: una solución simple con jQuery, sin necesidad de editar CSS.
Hover listener está adjunto al elemento padre, por lo que si el padre actual es más grande, simplemente puede envolver el iframe con un div antes de la tercera línea.
Espero que sea útil para alguien.
fuente
Me topé con este problema yo mismo y usé algunas de una combinación de dos respuestas muy útiles sobre esta pregunta: la respuesta de czerasz y massa .
Ambos tienen mucha verdad, pero en algún lugar de mis pruebas, descubrí que uno no funcionaba para dispositivos móviles y tenía un soporte de IE deficiente (solo funciona en IE11). Esta es la solución de nathanielperales, luego extendida por czerasz, que se basa en css-pointer-events y que no funciona en dispositivos móviles (no hay ningún puntero en dispositivos móviles) y no funciona en ninguna versión de IE que no sea v11 . Normalmente no me importaría menos, pero hay un montón de usuarios y queremos una funcionalidad consistente, así que elegí la solución de superposición, usando un contenedor para facilitar la codificación.
Entonces, mi marcado se ve así:
Entonces los estilos son así:
Por último el guión:
También agregué mi solución probada en una esencia de GitHub , si te gusta obtener cosas de allí ...
fuente
Esta es una solución con CSS y Javascript (es decir, Jquery pero también funciona con Javascript puro). Al mismo tiempo, el mapa responde. Evite el mapa para hacer zoom al desplazarse, pero el mapa se puede activar haciendo clic en él.
HTML / JQuery Javascript
CSS
Que te diviertas !
fuente
En Google Maps v3 ahora puede desactivar el desplazamiento para hacer zoom, lo que conduce a una experiencia de usuario mucho mejor. Otras funciones del mapa seguirán funcionando y no necesita divs adicionales. También pensé que debería haber algunos comentarios para el usuario para que puedan ver cuando el desplazamiento está habilitado, así que agregué un borde de mapa.
fuente
Esto le dará un mapa de Google receptivo que detendrá el desplazamiento en el iframe, pero una vez que haga clic en él, le permitirá hacer zoom.
Copie y pegue esto en su html pero reemplace el enlace del iframe con el suyo. Es un artículo con un ejemplo: deshabilite el zoom de la rueda de desplazamiento del mouse en los iframes incrustados de Google Map
fuente
Este sería mi enfoque para esto.
Pop esto en mi main.js o archivo similar:
Luego, simplemente inserte un div vacío donde desee que aparezca el mapa en su página.
<div id="map"></div>
Obviamente, también deberá llamar a la API de Google Maps. Simplemente creé un archivo llamado mapi.js y lo lancé a mi carpeta / js. Este archivo debe llamarse antes que el javascript anterior.
Cuando llame al archivo mapi.js, asegúrese de pasarle el atributo falso del sensor.
es decir:
<script type="text/javascript" src="js/mapi.js?sensor=false"></script>
La nueva versión 3 de la API requiere la inclusión del sensor por alguna razón. Asegúrese de incluir el archivo mapi.js antes de su archivo main.js.
fuente
Para google maps v2 - GMap2:
fuente
si tiene un iframe que usa la API incrustada de Google Map como esta:
puede agregar este estilo css: pointer-event: none; ES.
fuente
Aquí está mi opinión sobre la respuesta @nathanielperales extendida por @chams, ahora extendida nuevamente por mí.
HTML
jQuery
fuente
El más simple :
fuente
Agregue esto a su script:
fuente
Aquí está mi solución para el problema, estaba creando un sitio WP, por lo que hay un pequeño código php aquí. Pero la clave está
scrollwheel: false,
en el objeto del mapa.Espero que esto ayude. Salud
fuente