2011-08-25 13 views
44

Birlikte mobil cihazlardan tüm touchEnd olaylarını yakalarsak: Ben e Paramtre gelen touch.screenX, touch.screenY, touch.clientX ve touch.clientX almak gerekirtouchEnd olay özellikleri

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

. Gördüğüm tüm örnekler e.touches'ın bir koleksiyon olacağını ve e.touches[0] ile dokunma ayrıntılarına ulaşabileceğinizi gösteriyor. Bir ipad üzerindeki testlerimde, e.touches her zaman tanımsızdır. JQuery eklentileri kullanmıyorum. Ayrıca, tanımlanmamış olan e.targetTouch'ları da denedim.

Herkes yardımcı olabilir mi?

cevap

96

Aslında yayımlanan dokunuşlar, changedTouches dizide yani bulunacaktır:

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

Bu originalEvent özelliği geçmekte biraz daha güvenilir olduğunu düşünüyorum.

Burada changedTouches daha fazla bilgi bulabilirsiniz: http://www.w3.org/TR/touch-events/#changedtouches-of-a-touchevent

+4

bu kabul cevap olması gerekmez mi? Oy ver! –

+0

Katılıyorum, bu doğru çözüm. Ben, kendimi kullanıyorum, çünkü doğru veriye ihtiyaç duyulduğundan ve neden ihtiyaç duyulduğundan daha fazla API'yi karıştırdığımı kullanıyorum. –

+2

jQuery kullanıyorsanız, android için durum böyle değil. $ ('# test'). on ('touchend', işlev (evt) {console.log (evt.changedTouches);}); boşsa, eğer aynı şeyi yaparsanız ('# test'). bind ('dokunma' ... ama eğer jQuery denklemden çıkarırsanız ve getElementBy ve addEventListener yaparsa .. – WORMSS

10

Dokunurlar özelliği bir TouchList nesnesidir. TouchList sınıf referansını here görebilirsiniz.

Eğer #log div bu örnek kodu ile length özelliğini izlemek edin: touchstart ve touchmove yürütülürken, bir 0 touchEnd çalıştırırken

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

sen 1 edinir. Bu nedenle, e.touches[0]'dan tanımsız bir şekilde elde edersiniz.