JS: 事件.touches属性是如何工作的?

11

我不明白如何使用event.touches属性。例如,要获取 iPad/iPhone 上的手指数量,您应该使用

event.touches.length

那么为什么这个示例代码不起作用呢?

$('.image').bind('touchstart', function(event) {
  alert(event.touches.length);
});

但这个是有效的:

$('.image').bind('touchstart', function() {
  alert(event.touches.length);
});

难道不应该反过来吗?

1个回答

18

在第二种情况下,您是在回退到浏览器的全局(和原始的)event对象上,而不是jQuery特定的对象(在支持全局event的浏览器上,不是所有浏览器都支持,例如 Firefox 就不支持,因为它只是 Microsoft 的一些其他人复制的东西)。

看起来 jQuery 没有在自定义事件对象中传递 touches 属性。如事件对象文档所述,您可以在第一个示例中使用 event.originalEvent 来访问它具有的“特殊属性”,同时仍然获得 jQuery 规范化事件对象的好处,例如:

$('.image').bind('touchstart', function(event) {
  alert(event.originalEvent.touches.length);
});

...或者你可以在脚本开始时执行以下操作,告诉jQuery复制该属性:

jQuery.event.props.push("touches");

...然后你的第一个示例应该开始工作。


顺便提一下:如果你没有使用 jQuery Touch,你可以看一下它。我猜除了其他功能外,它还像上面显示的那样添加了touches属性(但这只是猜测)。


1
非常感谢!现在我明白了,而且它正在运作。顺便说一下,我正在使用jQTouch,所以显然它不会添加touches属性。 - Tina
@Tina:很高兴能帮到你。哇,关于jQTouch没有添加它的事情真是令人惊讶! - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接