我正在尝试使我的一些库与触摸设备一起使用,但我很难弄清楚它们是如何被支持的以及它们是如何工作的。
基本上,有5 个触摸事件,但似乎移动浏览器之间仅就事件达成共识touchstart
(duh)。我创建了一个小提琴作为测试用例。
我已经在装有 Android 4 的 Galaxy Note 上对此进行了测试,但您也可以使用桌面浏览器查看链接。
目标是试图弄清楚如何处理轻击、双击和长击。没有什么花哨。
基本上,这就是发生的事情:
Android 股票浏览器不会触发触摸事件。它只是尝试通过连续点击、触发和事件来模拟鼠标点击mousedown
,mouseup
但click
双击只是放大和缩小页面。
当手指触摸屏幕时,Chrome for Android 会触发 touchstart 事件。如果它发布得足够快,它会触发 then mousedown
、mouseup
和touchend
finallyclick
事件。
在长按的情况下,大约半秒后它会触发mousedown
和mouseup
,touchend
当手指抬起时,click
最后没有事件。
如果你移动你的手指,它会触发一个touchmove
事件几次,然后它会触发一个touchcancel
事件,之后什么都不会发生,甚至touchend
在抬起手指时也不会发生任何事件。
双击触发放大/缩小功能,但在事件方面它会触发组合-touchstart
两次touchevent
,没有触发鼠标事件。
Firefox for Android 会正确触发touchstart
事件,并且在短按触发的情况下,mousedown
和之后。mouseup
touchend
click
在长按的情况下,它会触发mousedown
,mouseup
最后是touchend
事件。对于这些事情,Chrome 也是如此。
但是如果你移动你的手指,如果连续触发touchmove
(正如人们所期望的那样)但是当手指离开带有事件监听器的元素时它不会触发事件,并且当手指离开浏览器视口时它不会触发事件.touchleave
touchcancel
对于双击,它的行为就像 Chrome。
Opera Mobile与 Chrome 和 Firefox 一样,只需轻按一下,但长按会激活某种我真的想禁用的共享功能。如果您移动手指或双击,它的行为就像 Firefox。
Chrome beta对短按执行通常的操作,但在长按的情况下,它不再触发mouseup
事件,只是touchstart
,然后mousedown
在半秒后,然后touchend
当手指抬起时。当手指移动时,现在它的行为类似于 Firefox 和 Opera Mobile。
在双击的情况下,它不会在缩小时触发触摸事件,而只会在放大时触发。
Chrome 测试版显示出最奇怪的行为,但我真的不能抱怨,因为它是测试版。
问题是:在最常见的触摸设备浏览器中,是否有一种简单的方法来尝试检测短按、长按和双击?
太糟糕了,我无法在带有 Safari 的 iOS 设备或 Windows Phone 7/Phone 8/RT 的 IE 上对其进行测试,但如果你们中的一些人可以的话,我们将非常感谢您的反馈。