touchend事件属性

Mat*_*rts 48 javascript jquery mobile-safari touch touch-event

如果我通过移动设备捕获所有touchend事件:

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

我需要从e参数中获取touch.screenX,touch.screenY,touch.clientX和touch.clientX.我见过的所有例子都表明e.touches将是一个集合,你可以通过触摸细节获得e.touches[0].在我对ipad的测试中,e.touches总是未定义的.我没有使用任何jquery插件.

还尝试了e.targetTouches,这也是未定义的.

有人可以帮忙吗?

Gop*_*han 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

  • 这不应该是公认的答案吗?投票吧! (4认同)
  • 如果你使用的是jQuery,那就不是android的情况.$('#test').on('touchend',function(evt){console.log(evt.changedTouches);}); 是空的,同样如果你做$('#test').bind('touchend'...但是如果你把jquery从等式中删除并执行getElementBy和addEventListener它就可以了.. (2认同)

小智 10

touches属性是一个TouchList对象.您可以在此处查看TouchList类引用.

如果使用#log div上的示例代码监视其length属性:

$('#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/>');
});
Run Code Online (Sandbox Code Playgroud)

执行touchstart和touchmove时,你将获得1,执行touchend时获得0.这就是你从中获取undefined的原因e.touches[0].