2010-11-09 14 views
1

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.

+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

+0

Super, * juste * ce que je veux entendre. ;-p J'ai testé sur un Galaxy S fonctionnant 2.1. – pr1001

Répondre

0

Je ne sais pas si vous pouvez l'utiliser: iScroll