2011-08-25 91 views
44

如果我趕上從移動設備與所有touchend事件:touchend事件屬性

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

我需要從電子放慢參數得到touch.screenX,touch.screenY,touch.clientX和touch.clientX。我見過的所有例子都表明e.touches將會是一個集合,你可以通過e.touches[0]獲得觸摸細節。在我對ipad的測試中,e.touches始終未定義。我沒有使用任何jQuery插件。

也試過e.targetTouches,這也是未定義的。

任何人都可以幫忙嗎?

回答

96

其實,發佈觸摸將changedTouches陣列中找到,即:

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

我覺得這是略多於通過originalEvent屬性會更可靠。

你可以閱讀更多的changedTouches這裏: http://www.w3.org/TR/touch-events/#changedtouches-of-a-touchevent

+4

不應該這是公認的答案?投票! –

+0

我同意,這是正確的解決方案。我自己正在使用它,因爲它具有所需的正確數據,並且爲什麼要混合比需要更多的API。 –

+2

如果您使用的是jQuery,則android不是這種情況。 $('#test')。on('touchend',function(evt){console.log(evt.changedTouches);});是空的,如果你做$('#test')。bind('touchend'...,但是如果你將jquery從等式中刪除並且執行getElementBy和addEventListener,它會起作用。 – WORMSS

10

touches屬性是一個TouchList對象。你可以看到TouchList類參考here

如果監視與#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/>'); 
}); 

在執行touchstart和touchmove,執行touchEnd當一個0你將得到1。這就是爲什麼你從e.touches[0]獲得未定義的原因。