Quiero deshabilitar la funcionalidad de zoom de doble toque en elementos especificados en el navegador (en dispositivos táctiles), sin deshabilitar toda la funcionalidad de zoom .
Por ejemplo: un elemento se puede tocar varias veces para que suceda algo. Esto funciona bien en los navegadores de escritorio (como se esperaba), pero en los navegadores de dispositivos táctiles, se acercará.
Respuestas:
Nota (a partir de 2020-08-04): esta solución no parece funcionar en iOS Safari v12 +. Actualizaré esta respuesta y eliminaré esta nota una vez que encuentre una solución clara que cubra iOS Safari.
Solución solo CSS
Agregue
touch-action: manipulation
a cualquier elemento en el que desee deshabilitar el zoom de doble toque, como con la siguientedisable-dbl-tap-zoom
clase:De los
touch-action
documentos (el énfasis es mío):Este valor funciona en Android y en iOS.
fuente
Lo he usado muy recientemente y funciona bien en iPad. No lo he probado en Android ni en otros dispositivos (porque el sitio web se mostrará solo en iPad).
fuente
Sé que esto puede ser antiguo, pero encontré una solución que funcionó perfectamente para mí. No es necesario utilizar metaetiquetas locas y detener el zoom del contenido.
No estoy 100% seguro de lo multidispositivo que es, pero funcionó exactamente como quería.Esto simplemente deshabilitará la función de toque normal y luego volverá a llamar a un evento de clic estándar. Esto evita que el dispositivo móvil haga zoom, pero por lo demás funciona normalmente.
EDITAR: Esto ahora se ha probado y se está ejecutando en un par de aplicaciones en vivo. Parece ser 100% entre navegadores y plataformas. El código anterior debería funcionar como una solución de copiar y pegar en la mayoría de los casos, a menos que desee un comportamiento personalizado antes del evento de clic.
fuente
pointer-events: none
Solo quería responder a mi pregunta correctamente, ya que algunas personas no leen los comentarios debajo de una respuesta. Asi que aqui esta:
No escribí esto, solo lo modifiqué. Encontré la versión solo para iOS aquí: https://gist.github.com/2047491 (gracias Kablam)
fuente
CSS para deshabilitar el zoom de doble toque globalmente (en cualquier elemento):
Gracias Ross, mi respuesta extiende la suya: https://stackoverflow.com/a/53236027/9986657
fuente
document.getElementById('root').addEventListener('click', () => {})
Si necesita una versión que funcione sin jQuery , modifiqué la respuesta de Wouter Konecny (que también fue creada modificando esta esencia por Johan Sundström ) para usar JavaScript vanilla.
Luego agregue un controlador de eventos
touchstart
que llame a esta función:fuente
myButton.addEventListener('touchstart', preventZoom);
Debe establecer la propiedad CSS
touch-action
anone
como se describe en esta otra respuesta https://stackoverflow.com/a/42288386/1128216fuente
Desactive el doble toque para hacer zoom en las pantallas táctiles. Explorador de Internet incluido.
fuente
Simplemente evite el comportamiento predeterminado de
click
,dblclick
o lostouchend
eventos deshabilitarán la funcionalidad de zoom.Si ya tiene una devolución de llamada en uno de estos eventos, simplemente llame a
event.preventDefault()
.fuente
Si hay alguien como yo que está experimentando este problema con Vue.js , simplemente agregar .prevent hará el truco:
@click.prevent="someAction"
fuente
Esto evitará el zoom de doble toque en los elementos en 'cuerpo', esto se puede cambiar a cualquier otro selector
Pero esto también evitó que mi evento de clic se activara cuando se hacía clic varias veces, así que tuve que vincular otro evento para activar los eventos en varios clics.
En touchstart agregué el código para evitar el zoom y activar un clic.
fuente
Supongo que tengo un
<div>
área de contenedor de entrada con texto, controles deslizantes y botones, y quiero inhibir los toques dobles accidentales en eso<div>
. Lo siguiente no inhibe el zoom en el área de entrada y no se relaciona con el doble toque y el zoom fuera de mi<div>
área. Existen variaciones según la aplicación del navegador.Solo lo probé.
(1) Para Safari en iOS y Chrome en Android, y es el método preferido. Funciona excepto para la aplicación de Internet en Samsung, donde deshabilita los toques dobles no en el total
<div>
, sino al menos en los elementos que manejan toques. Vuelvereturn false
, con excepción detext
yrange
entradas.(2) Opcionalmente para la aplicación de Internet incorporada en Android (5.1, Samsung), inhibe los toques dobles en
<div>
, pero inhibe el zoom en<div>
:(3) Para Chrome en Android 5.1, deshabilita el doble toque, no inhibe el zoom y no hace nada sobre el doble toque en los otros navegadores. La inhibición del doble toque
<meta name="viewport" ...>
es irritante, porque<meta name="viewport" ...>
parece una buena práctica.fuente
Uso de eventos táctiles CSS: ninguno Elimina por completo todos los eventos táctiles. Dejando esto aquí en caso de que alguien también tenga este problema, me tomó 2 horas encontrar esta solución y es solo una línea de css. https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action
fuente
Aquí vamos
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
fuente