touchend事件属性

时间:2011-08-25 14:55:21

标签: javascript jquery touch mobile-safari touch-event

如果我通过以下方式捕获来自移动设备的所有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,这也是未定义的。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:98)

实际上,已发布的触摸将在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

答案 1 :(得分: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时会获得1,执行touchend时会获得0。这就是您从e.touches[0]获得未定义的原因。