propriétés de l'événement touchend

Si j'attrape tous les événements touchend des appareils mobiles avec:

$(document.body).bind('touchend', function (e) {
var touch = e.touches[0]; // doesnt work
...

J'ai besoin de toucher.screenX, touch.screenY, touch.clientX et toucher.clientX du paramètre E. Tous les exemples que j'ai vus suggèrent que E. touches sera une collection, et vous pouvez obtenir les détails tactiles avec e.touches[0]. Dans mes tests sur un ipad, e.touches est toujours indéfini. Je n'utilise aucun plugin jquery.

Également essayé e. targetTouches, qui est également indéfini.

Quelqu'un peut-il aider?

44
demandé sur Thaddeus Albers 2011-08-25 18:55:20

2 réponses

En fait, les touches libérées seront trouvées dans le tableau changedTouches, c'est-à-dire:

e.changedTouches[0].pageX // get the end x page coordinate for a released touch

Je pense que c'est un peu plus fiable que de passer par la propriété originalEvent.

Vous pouvez en savoir plus sur changedTouches ici: http://www.w3.org/TR/touch-events/#changedtouches-of-a-touchevent

95
répondu Gopherkhan 2012-04-09 20:59:08

La propriété touche est un objet TouchList. Vous pouvez voir la référence de classe TouchList ici .

Si vous surveillez sa propriété length avec cet exemple de code sur # log div:

$('#element').bind('touchstart', function(event) 
{
    $('#log').append(event.originalEvent.touches.length+'<br/>');
});

$('#element').bind('touchmove', function(event) 
{
    $('#log').append(event.originalEvent.touches.length+'<br/>');
});

$('#element').bind('touchend', function(event) 
{
    $('#log').append(event.originalEvent.touches.length+'<br/>');
});

Vous obtiendrez 1 lors de l'exécution de touchstart et touchmove, un 0 lors de l'exécution de touchend. C'est pourquoi vous obtenez undefined à partir de e.touches[0].

10
répondu javibilbo 2011-11-02 06:14:34