Contexto: aplicación Web en MobileSafari/iPad, tanto en pantalla completa y se incluyeron en iframePrevenir por defecto Presione, pero no por defecto Arrastre en iOS MobileSafari?
Meta: Técnica que proporciona controladores de eventos personalizados para Prensa y Tap pero noPinch (zoom) o Arrastra (scroll/pan). Queremos proporcionar un comportamiento personalizado para Press, pero dejar que Safari maneje Scroll/Pan/Zoom todavía.
Problema: Los dos objetivos parecen ser mutuamente excluyentes. Para evitar el comportamiento predeterminado de un gesto de prensa, debe llamarse al event.preventDefault en respuesta inmediata al ontouchstart. Sin embargo, para permitir que el comportamiento predeterminado proceda con Arrastrar, debemos no llamar a event.preventDefault en el inicio de inicio inicial. Una vez que se invoca preventDefault, no hay forma de recuperar el comportamiento predeterminado durante esa secuencia de gestos (es decir, hasta que todos los dedos se salgan). Arrastre no se reconoce hasta que haya ocurrido algún movimiento.
Arrastrar se ilustra como el ejemplo más simple, pero nos preocupamos por obtener el comportamiento predeterminado para Pellizcar y Doble toque también. Nunca queremos que el comportamiento predeterminado de MobileSafari Press sea "Copiar imagen" o seleccionar texto.
intentos hasta el momento:
- guardar el evento ontouchstart y, después de un timeout, llame a preventDefault en él más tarde (justo antes de la prensa sería reconocido). Sin efecto.
- Escuche 'oncontextmenu'. No, el comportamiento de la prensa predeterminado no se señala ni se enruta a través de este evento.
- Evite el valor predeterminado en todos nuestros controladores ontouch *, y cuando reconozcamos un gesto Arrastrar/Pellizcar, simulemos nuevos eventos usando initTouchEvent y/o initGestureEvent. Los eventos creados mediante programación golpean todas las devoluciones de llamada , pero Safari parece no prestarles atención, lo que no desencadena ningún comportamiento predeterminado.
- Divida el reconocimiento de Safari's Press con un movimiento falso. Safari cancela una presión en el más mínimo movimiento, pero permitimos un poco de slop. Simular un evento de movimiento (como el anterior) justo después de que ontouchstart no haga que Safari no reconozca Presione si el dedo no se mueve "de verdad".
Tenemos un conjunto completo de reconocedores de gestos implementados (en Javascript, ontouch *) al estilo de native iOS gesture recognizers de Apple. No tenemos problemas para reconocer cualquier gesto, simplemente no sabemos de una buena manera de replicar el comportamiento Zoom/Panorámica/Doble toque que Safari proporciona de forma gratuita.
No necesitamos código; estamos buscando cualquier solución teórica (más allá de "solo implementar pan/zoom usted mismo", aunque si tiene una forma hábil de hacerlo nos interesa) que conduzca a un éxito razonable. También estamos interesados en conocer otros intentos similares para hacer esto: seguramente no podemos haber sido los primeros en probar este?
Alternate TL; DR: ¿Hay alguna manera de evitar un valor predeterminado Presione (también conocido como tocar y mantener) que no sea en el inicio táctil?