【发布时间】:2013-01-07 08:25:08
【问题描述】:
我正在尝试使我的一些库与触摸设备一起使用,但我很难弄清楚它们是如何被支持的以及它们是如何工作的。
基本上,有5 touch events,但似乎移动浏览器之间只有在touchstart 事件上达成共识(duh)。我创建了一个fiddle 作为测试用例。
我已经在装有 Android 4 的 Galaxy Note 上对此进行了测试,但您也可以使用桌面浏览器查看链接。
我们的目标是尝试弄清楚如何处理轻按、双击和长按。没什么特别的。
基本上是这样的:
Android 股票浏览器 不会触发触摸事件。它只是尝试通过点击模拟鼠标点击,连续触发mousedown、mouseup 和click 事件,但双击只是放大和缩小页面。
Chrome for Android 会在手指触摸屏幕时触发 touchstart 事件。如果它发布得足够快,它会触发mousedown、mouseup、touchend,最后是click 事件。
在长按的情况下,大约半秒后它会在手指抬起时触发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 测试版通常用于短按,但在长按的情况下,它不再触发 mouseup 事件,仅触发 touchstart,然后在半秒后触发 mousedown ,然后在抬起手指时touchend。当手指移动时,现在它的行为就像 Firefox 和 Opera Mobile。
在双击的情况下,缩小时不会触发触摸事件,而只会在放大时触发。
Chrome 测试版显示出最奇怪的行为,但我真的不能抱怨,因为它是测试版。
问题是:在最常见的触摸设备浏览器中,是否有一种简单且有效的方法来尝试检测短按、长按和双击?
很遗憾,我无法在带有 Safari 的 iOS 设备或适用于 Windows Phone 7/Phone 8/RT 的 IE 上对其进行测试,但如果你们中的一些人可以的话,我们将非常感谢您的反馈。
【问题讨论】:
-
你试过 Tocca.js 吗? gianlucaguarini.github.io/Tocca.js 它可以在任何类型的设备上启用所有丢失的触摸事件,它只有大约 1kb
标签: javascript mobile touch