2011-08-25 18 views
44

Jeśli złapię wszystkie zdarzenia touchend z urządzeń mobilnych z:właściwości zdarzeń touchend

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

Muszę dostać się touch.screenX, touch.screenY, touch.clientX i touch.clientX z e paramter. Wszystkie przykłady, które widziałem sugerują, że e.touches będą kolekcją i możesz uzyskać szczegóły dotyku za pomocą e.touches[0]. W moich testach na iPadzie, e.touches jest zawsze niezdefiniowany. Nie używam żadnych wtyczek jquery.

Próbowano także e.targetTouches, który również jest niezdefiniowany.

Czy ktoś może pomóc?

Odpowiedz

96

Właściwie uwalniane akcenty można znaleźć w tablicy changedTouches, tj:

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

myślę, że to jest nieco bardziej niezawodny niż przeżywa nieruchomości originalEvent.

można przeczytać więcej na changedTouches tutaj: http://www.w3.org/TR/touch-events/#changedtouches-of-a-touchevent

+4

Nie powinno to być zaakceptowane odpowiedź? Głosujcie to! –

+0

Zgadzam się, to jest poprawne rozwiązanie. Ja sam używam tego, ponieważ ma on potrzebne właściwe dane i dlaczego miesza więcej API niż potrzeba. –

+2

Nie jest tak w przypadku Androida, jeśli używasz jQuery. $ ("# test"). on ("touchend", funkcja (evt) {console.log (evt.changedTouches);}); jest pusty, to samo, jeśli wykonujesz $ ('# test'). bind ('touchend' ... ale jeśli wycinasz jquery z równania i robisz getElementBy i addEventListener działa ... – WORMSS

10

Właściwość dotyka jest obiektem TouchList. Możesz zobaczyć odwołanie do klasy TouchList here.

Jeśli monitorowanie jego właściwości length z tym przykładowym kodem na #log Gr:

$('#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/>'); 
}); 

otrzymasz 1 podczas wykonywania touchstart i touchmove An 0 podczas wykonywania touchend. Dlatego uzyskujesz niezdefiniowane z e.touches[0].