Je fais une application web Javascript et je ne peux pas pour la vie de moi obtenir l'événement touchstart
à feu. Je reçois les événements touchmove
et touchend
sans problème. C'est un problème car, selon moi, la meilleure façon de distinguer un tap et un mouvement de défilement est de mettre à zéro un compteur sur l'événement touchstart
, de le mettre à jour à touchmove
, puis de le comparer à touchend
. Je fais ceci pour que je puisse faire une action à la fin du tap mais pas un rouleau. Par exemple, il serait très déroutant si une page ouverte pour un élément dans une liste après avoir terminé le défilement de cette liste, mais ce serait bien de pouvoir appuyer sur un élément pour ouvrir sa page.Comment puis-je intercepter les taps sans faire défiler Javascript en Android?
C'est ce que j'ai:
// FIXME: this doesn't seem to ever fire
el.addEventListener('touchstart', function(e) {
// make sure that at the start of every touch we're not considered to be moving
alert("Touch starting");
app.__touchMoving = 0;
}, false);
el.addEventListener('touchmove', function(e) {
app.__touchMoving++;
}, false);
el.addEventListener('touchend', function(e) {
alert("Touch ended. We moved beforehand this many times: " + app.__touchMoving);
// if we are moving
if (app.__touchMoving > 0) {
// stop, since we're dragging, not tapping
return false;
}
// else we're no longer moving, so it was a tap
}
Je ne vois jamais l'alerte touchstart
. Si je fais défiler le touchend
tirera et app__touchMoving aura une sorte de valeur décente. Sur une note de côté, j'ai remarqué que parfois le touchend
semblera tirer plusieurs fois.
Est-ce que je manque quelque chose de basique ici? Beaucoup de gens disent que cela devrait fonctionner correctement sur Android (et iPhone), mais le premier auditeur ne semble jamais tirer.
Mise à jour: Je dois mentionner que j'ai testé sur un Samsung Galaxy S sous Android 2.1.
Votre code fonctionne très bien sur mon Nexus One/CyanogenMod tous les soirs (sauf un manque ')' à la fin, et la définition de '' el' et app'). Il détecte le démarrage, le déplacement et la fin, et signale correctement le nombre de "mouvements". – MartinodF
Super, * juste * ce que je veux entendre. ;-p J'ai testé sur un Galaxy S fonctionnant 2.1. – pr1001