在那份代码中,我使用鼠标滚轮来缩放HTML5画布。我找到了一些可以规范Chrome和Firefox之间速度差异的代码。然而,在Safari中,缩放处理的速度比这两者都快得多。
以下是我目前拥有的代码:
var handleScroll = function(e){
var delta = e.wheelDelta ? e.wheelDelta/40 : e.detail ? -e.detail/3 : 0;
if (delta) ...
return e.preventDefault() && false;
};
canvas.addEventListener('DOMMouseScroll',handleScroll,false); // For Firefox
canvas.addEventListener('mousewheel',handleScroll,false); // Everyone else
如何编写代码以在Chrome v10/11、Firefox v4、Safari v5、Opera v11和IE9上滚动相同距离的鼠标滚轮事件?
此问题相关,但没有好的答案。
编辑:进一步调查显示,一个向上的滚动事件为:
| evt.wheelDelta | evt.detail ------------------+----------------+------------ Safari v5/Win7 | 120 | 0 Safari v5/OS X | 120 | 0 Safari v7/OS X | 12 | 0 Chrome v11/Win7 | 120 | 0 Chrome v37/Win7 | 120 | 0 Chrome v11/OS X | 3 (!) | 0 (possibly wrong) Chrome v37/OS X | 120 | 0 IE9/Win7 | 120 | undefined Opera v11/OS X | 40 | -1 Opera v24/OS X | 120 | 0 Opera v11/Win7 | 120 | -3 Firefox v4/Win7 | undefined | -3 Firefox v4/OS X | undefined | -1 Firefox v30/OS X | undefined | -1
此外,在OS X上使用MacBook触摸板即使移动缓慢也会产生不同的结果:
- 在 Safari 和 Chrome 上,鼠标滚轮的
wheelDelta
值为 3 而非 120。 - 在 Firefox 中,
detail
通常为2
,有时为1
,但当滚动非常缓慢时没有任何事件处理程序被触发。
因此问题是:
最好的方法是什么,可以区分这种行为(理想情况下不需要任何用户代理或操作系统嗅探)?