2011-08-25 6 views
44

Se prendo tutti gli eventi touchend da dispositivi mobili con:proprietà dell'evento touchend

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

ho bisogno di ottenere il touch.screenX, touch.screenY, touch.clientX e touch.clientX dalla posta paramter. Tutti gli esempi che ho visto suggeriscono che e.touches sarà una raccolta e puoi ottenere i dettagli del contatto con e.touches[0]. Nei miei test su un iPad, e.touches è sempre indefinito. Non sto usando alcun plugin jQuery.

Anche provato e.targetTouches, che è anche indefinito.

Qualcuno può aiutare?

risposta

96

In realtà, rilasciati si trovano nella matrice changedTouches, vale a dire:

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

credo che questo sia un po 'più affidabile che passare attraverso la proprietà originalEvent.

Si può leggere di più su changedTouches qui: http://www.w3.org/TR/touch-events/#changedtouches-of-a-touchevent

+4

Non dovrebbe essere questa la risposta accettata? Vota! –

+0

Sono d'accordo, questa è la soluzione corretta. Io, io stesso, sto usando questo dato che ha i dati corretti necessari e perché combinare più API del necessario. –

+2

Questo non è il caso con Android se si utilizza jQuery. $ ('# test'). on ('touchend', function (evt) {console.log (evt.changedTouches);}); è vuoto, lo stesso se fai $ ('# test'). bind ('touchend' ... ma se taglia jquery dall'equazione e fai getElementBy e addEventListener funziona. – WORMSS

10

La proprietà touches è un oggetto TouchList. È possibile visualizzare il riferimento alla classe TouchList here.

Se si controlla la proprietà length con questo codice di esempio a #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/>'); 
}); 

si ottiene 1 durante l'esecuzione di TouchStart e touchmove, un 0 durante l'esecuzione touchend. Questo è il motivo per cui ottieni un valore non definito da e.touches[0]. tocchi

Problemi correlati