如何防止移动浏览器中的模拟鼠标事件?

时间:2012-03-11 17:08:51

标签: javascript events dom browser touch

移动浏览器模拟鼠标事件,以支持仅将处理程序附加到鼠标事件的网站。但是,如果要实现两个交互模型 - 一个用于鼠标事件,一个用于触摸事件 - 那么阻止浏览器模拟鼠标事件会很有帮助。

在iOS Safari上,这非常简单 - 只需在touchend上运行preventDefault:

jQuery(document).on('touchend', function(e) {
  // Do some logic      
  e.preventDefault();
});

这很理智。不幸的是,Android的默认浏览器和Dolfin都没有使用这种技术取消鼠标模拟。 (当touchDefault在touchstart上运行时,Dolfin将取消mousedown - 但这不是很有帮助,因为你不知道手指将在touchstart上采取什么动作。)

是否有其他方式有条件地,甚至没有条件地阻止模拟鼠标事件发射?

[编辑]

为了更好地了解问题,我在http://labs.cruncher.ch/touch-events-compatibility-table/

启动了触摸事件兼容性表格。

1 个答案:

答案 0 :(得分:3)

虽然有一些狡猾的方法来实现这一点,但我用两种常见的做法来解决这种差异:

1)使用标记

可以设置事件处理程序中的布尔标志,例如mouseIsDownmouseIsMoving,并检查鼠标和触摸事件。如果用户单击鼠标,请将其作为鼠标事件接受。然后,如果发生触摸事件,请忽略它。

2)仅实施必要的内容

嗯,无论如何这是好习惯。如果您不需要,请不要费心添加touchmovemousemove个事件。这将使维护代码变得更加困难。编辑:可能应该更具体:如果您需要更高级的事件跟踪,请考虑重新考虑您的UI。

最后,不要依赖外部硬件配置列表,因为这些列表很少“完全”准确。