带有 Firefox 的 Surface Pro 3 - 具有单点触摸触发 touch/mouse 事件而不是滚轮事件

Surface Pro 3 with Firefox - Have single touch trigger touch/mouse events instead of wheel events

仅在带有 Firefox 的 Surface Pro 3 上:

当用单指在元素上做出滑动手势时,浏览器将触发 wheel 事件而不是 touchmovemousemove 事件。如何停止滚轮行为,并允许始终将单个手指视为 touch/mouse 移动?

所以我想将单个手指滑动视为一系列 mousemovetouchmove 而不是 wheel 事件。如果在此元素上滑动,我根本不希望单指滑动来滚动页面。这在 Chrome 和 IE11 中很容易做到。这在 Firefox 中似乎是不可能的。目前我认为这是一个错误,但我可能遗漏了一些东西。

这是一个简单的例子:

http://codepen.io/simonsarris/pen/PwbdRZ

var can = document.getElementById('can');

can.addEventListener('mousemove', function(e) {
  // Will never happen on the Surface Pro 3 in Firefox
  // Will happen in IE11 though
  console.log('mouseMove')
});

can.addEventListener('touchmove', function(e) {
  // Will never happen on the Surface Pro 3 in Firefox
  // Will happen in Chrome though
  console.log('touchMove')
});

// Stops the window from scrolling in firefox when you swipe on the element
// But stopping this does not allow the single touch gesture to register as mousemove or touchmove events
can.addEventListener('wheel', function(e) {
  console.log('wheel')
  e.preventDefault();
});


// consider also the 'DOMMouseScroll' event, though preventing this event will not stop firefox from panning the page.

因为我要防止 wheel 中的默认设置,所以当单指向上或向下滑动时,滚动页面会停止

如果您在红色框中滑动,window Firefox 中的滚动将停止,但不会触发 mousemove 或 touchmove 事件。 (但是,如果您水平滑动而不是垂直滑动,mousemove 将会触发)

触摸事件目前在桌面版 Firefox (36.0.4) 中被禁用,尽管它们会在 运行 Firefox 处于 Metro 模式时或通过 dom.w3c_touch_events.enabled 设置明确启用它们时起作用。有关详细信息,请参阅 the MDN article on Touch events