跨浏览器规范化鼠标滚轮速度
在该代码中,我使用鼠标滚轮放大/缩小HTML5 Canvas。我发现了一些规范化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上滚动的相同“delta”值?
这个问题是相关的,但没有很好的答案。
编辑:进一步调查显示,一个滚动事件“向上”是:
| 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 上,鼠标滚轮的值为 3 而不是 120。
wheelDelta
- 在 Firefox 上,通常有时是 ,但是当滚动非常缓慢时,根本没有事件处理程序触发。
detail
2
1
所以问题是:
区分此行为的最佳方法是什么(理想情况下没有任何用户代理或操作系统嗅探)?