web-dev-qa-db-fra.com

propriétés d'événement touchend

Si j'attrape tous les événements tactiles à partir d'appareils mobiles avec:

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

Je dois obtenir le touch.screenX, touch.screenY, touch.clientX et touch.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 n'est toujours pas défini. Je n'utilise aucun plugin jquery.

Également essayé e.targetTouches, qui n'est pas non plus défini.

Quelqu'un peut-il aider?

48
Matt Roberts

En fait, les touches relâchées se trouvent 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

98
Gopherkhan

La propriété touches est un objet TouchList. Vous pouvez voir la référence de la 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 de e.touches[0].

10
javibilbo