ste*_*and 10 javascript browser events dom touch
移动浏览器模拟鼠标事件,以支持仅将处理程序附加到鼠标事件的网站.但是,如果要实现两个交互模型 - 一个用于鼠标事件,一个用于触摸事件 - 那么防止浏览器模拟鼠标事件会很有帮助.
在iOS Safari上,这非常简单 - 只需在touchend上运行preventDefault:
jQuery(document).on('touchend', function(e) {
// Do some logic
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
这很理智.不幸的是,Android的默认浏览器和Dolfin都没有使用这种技术取消鼠标模拟.(当touchDefault在touchstart上运行时,Dolfin将取消mousedown - 但这不是很有帮助,因为你不知道手指将在touchstart上采取什么动作.)
有没有其他方式有条件地,甚至没有条件地阻止模拟鼠标事件发射?
[编辑]
为了更好地理解问题,我在以下网址开始了触摸事件兼容性表:http://labs.cruncher.ch/touch-events-compatibility-table/
虽然有一些巧妙的方法可以实现这一点,但我使用两种常见的做法来解决这种差异:
1)使用标志
在事件处理程序中设置布尔标志(例如mouseIsDown或mouseIsMoving),可以针对鼠标和触摸事件进行设置和检查。如果用户单击鼠标,则将其接受为鼠标事件。然后,如果触摸事件随之发生,则忽略它。
2)仅实施必要的内容
嗯,无论如何,这是一个很好的做法。如果不需要,请不要添加touchmove和事件。mousemove这只会使代码的维护变得更加困难。编辑:可能应该更具体:如果您需要更高级的事件跟踪,请考虑重新考虑您的用户界面。
最后,不要依赖外部硬件配置列表,因为这些列表很少“完全”准确。
| 归档时间: |
|
| 查看次数: |
2440 次 |
| 最近记录: |