iPad触摸事件的touchstart被触发两次

7

我正在处理跨平台的触摸事件(例如滑动等)。在安卓设备上可以工作,但是在 iPad 上,touchstart 事件会触发两次。

this.element.addEventListener('touchstart', mousedown, false);

var mousedown = function(event) {
    // Finger Press
    event.preventDefault();
    _this.inGesture = true;
    _this._originalX = (event.touches) ? event.touches[0].pageX : event.pageX;
    _this._originalY = (event.touches) ? event.touches[0].pageY : event.pageY;

};

这个函数在iPad上触发两次,但在Android上功能正常。

我应该补充说明的是,它首先触发touchstart,然后是touchmove,接着是touchend,最后出于某种原因再次触发touchstart。

JSFiddle链接:http://jsfiddle.net/6Lb3Z/1

截图:http://i.imgur.com/GS8uI.png


1
我刚在我的iPad上测试了一下,它只触发了一次 -- http://jsfiddle.net/Kai/N7NA5/ - Kai
好的,谢谢你提供的信息。问题肯定是出在别的地方了。这里是 JSFiddle 的链接:http://jsfiddle.net/6Lb3Z/。 - Jasard
我已经更新了 jsfiddle 的设置,确保其能够正确运行。然而,我仍然只看到了一个 touchstart 的呼叫:http://www.jsfiddle.net/6Lb3Z/1/ 我使用的是装有 iOS 5.1 的 iPad2。截图请参考 http://i.imgur.com/Oz5z4.png - Kai
我刚在两个不同的iPhone和一台运行iOS 5.1的iPad2上进行了测试,它们都可以正常工作。只有在这个运行4.3.2的iPad2上出现问题。我想现在可能会先忽略它! - Jasard
截图:http://i.imgur.com/GS8uI.png - Jasard
由于这是特定于4.3.2版本的,可能是他们在后续版本中修复的错误。但我在谷歌上没有找到任何相关信息。请问您能否确认您的代码中没有重复调用/包含任何可能会在代码其他部分注册事件处理程序的内容? - Kai
1个回答

0
如果您正在使用像jQuery或Zepto这样的库,那么您可以使用.one方法。
从jQuery的API文档中:

为元素附加事件处理程序。 处理程序每个元素最多仅执行一次。


4
那不是指每次触摸只有一次,而是指曾经有过一次吗? - Rob Trickey

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