J'essaie de faire fonctionner certaines de mes bibliothèques avec des dispositifs tactiles, mais j'ai du mal à comprendre comment ils sont pris en charge et comment ils fonctionnent.
En gros, il y a 5 événements tactiles mais il semble qu'il n'y ait un consensus parmi les navigateurs mobiles que sur l'élément de base. touchstart
événement (duh). J'ai créé un violon comme un cas de test.
Je l'ai testé sur mon Galaxy Note avec Android 4, mais vous pouvez aussi vérifier le lien avec un navigateur de bureau.
L'objectif est d'essayer de comprendre comment gérer les taps, les doubles taps et les longs taps. Rien d'extraordinaire.
En gros, voilà ce qui se passe :
El Navigateur Android stock ne déclenche pas d'événements de contact. Il essaie juste d'émuler les clics de souris avec des tapotements, en déclenchant mousedown
, mouseup
y click
consécutivement, mais les doubles tapotements ne font que zoomer en avant et en arrière sur une page.
Chrome pour Android déclenche l'événement touchstart lorsque le doigt touche l'écran. S'il est libéré assez tôt, il déclenche alors mousedown
, mouseup
, touchend
et enfin click
événements.
En cas de long robinet après environ une demi-seconde, il se déclenche mousedown
y mouseup
y touchend
quand le doigt est levé, sans click
l'événement à la fin.
Si vous déplacez votre doigt il tire un touchmove
quelques fois, puis il déclenche un événement touchcancel
et rien ne se passe par la suite, pas même une touchend
en levant le doigt.
A double tapotement déclenche les fonctions de zoom avant/arrière, mais sur le plan événementiel, il déclenche le combo touchstart
- touchevent
deux fois, sans qu'aucun événement de souris ne soit déclenché.
Firefox pour Android déclenche correctement la touchstart
et en cas d'incendie de robinet court mousedown
, mouseup
, touchend
y click
après.
En cas de long robinet il tire mousedown
, mouseup
et enfin touchend
événements. C'est la même chose avec Chrome pour ces choses-là.
Mais si vous déplacez votre doigt si les feux touchmove
continuellement (comme on peut s'y attendre) mais elle ne no tirer le touchleave
lorsque le doigt quitte l'élément avec l'écouteur d'événements, et ne déclenche pas l'événement touchcancel
lorsque le doigt sort de la fenêtre du navigateur.
Para robinets doubles il se comporte exactement comme Chrome.
Opera Mobile fait la même chose que Chrome et Firefox pour un appui court, mais en cas d'appui long, il active une sorte de fonction de partage que je veux vraiment désactiver. Si vous déplacez votre doigt, ou si vous appuyez deux fois, il se comporte comme Firefox.
Chrome bêta fait ce qui est habituel pour les tapotements courts, mais dans le cas de tapotements longs, il ne déclenche pas l'option mouseup
plus d'événement, juste touchstart
alors mousedown
après une demi-seconde, puis touchend
quand le doigt est levé. Lorsque le doigt est déplacé, il se comporte maintenant comme Firefox et Opera Mobile.
En cas de robinets doubles il ne déclenche pas d'événements de contact lors d'un zoom arrière mais uniquement lors d'un zoom avant.
La version bêta de Chrome présente le comportement le plus étrange, mais je ne peux pas vraiment me plaindre puisqu'il s'agit d'une version bêta.
La question est Pour les navigateurs les plus courants des appareils tactiles, existe-t-il un moyen simple et efficace d'essayer de détecter les tapotements courts, les tapotements longs et les doubles tapotements ?
Dommage que je ne puisse pas le tester sur les appareils iOS avec Safari, ou IE pour Windows Phone 7/Phone 8/RT, mais si certains d'entre vous le peuvent, vos commentaires seraient très appréciés.