Al hacer una aplicación de una sola página Javascript con elementos DOM interactivos, he encontrado que la secuencia "mouseover-mousemove-mousedown-mouseup-click
" ocurre en un grupo después de la secuencia de eventos "touchstart-touchmove-touchend
".Prevenir eventos de emulación de mouse (es decir, hacer clic) desde eventos táctiles en Mobile Safari/iPhone usando Javascript
También he encontrado que es posible evitar que los "eventos" mouse*-click
suceda haciendo una "event.preventDefault()
" durante el evento touchstart
, pero solamente entonces, y no durante el touchmove
y touchend
. Este es un diseño extraño, porque no es posible saber durante el touchstart
si el usuario tiene la intención de arrastrar o deslizar o simplemente tocar/hacer clic en el elemento.
Terminé configurando una bandera "ignore_next_click" en algún lugar vinculada a una marca de tiempo, pero esto obviamente no es muy limpio.
¿Alguien sabe de una mejor manera de hacerlo, o nos falta algo?
Tenga en cuenta que mientras que un "clic" puede ser reconocido como una secuencia "touchstart-touchend
" (es decir, sin "touchmove
"), hay ciertas cosas, como foco de entrada de teclado, que sólo pueden ocurrir cuando se click
evento adecuado.
Estoy interesado en los eventos táctiles del iPad Safari también, pero no me queda claro cuál es el problema específico que se está tratando de resolver. Si todavía está trabajando en este tema, o lo ha resuelto, ¿quiere elaborarlo? – Tim
Quiero ser capaz de manejar ciertos eventos como arrastrar y soltar, y también ser capaz de manejar eventos de "clic". Tengo que manejar los eventos de "hacer clic" como eventos correctos de "clic" (en lugar de tocar/activar) porque ciertas cosas, como el enfoque de entrada de teclado, solo * pueden * activarse dentro de un controlador de evento de clic. –
Este problema es extremadamente molesto y afecta a Android también. –