如果我通过以下方式捕获来自移动设备的所有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,这也是未定义的。
有人可以帮忙吗?
答案 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]
获得未定义的原因。