最佳答案
在这段代码中,我使用鼠标滚轮来放大/缩小 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中,我可以使用什么代码来获得相同数量的鼠标滚轮相同的“ delta”值?
编辑 : 进一步的研究表明,一个滚动事件‘ up’是:
| 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 轨迹板,即使移动缓慢,也会得到不同的结果:
wheelDelta
值是3,而不是120。detail
通常是 2
,有时是 1
,但是当滚动非常慢的时候是 根本没有事件处理程序发生火灾。所以问题是:
区分这种行为的最佳方法是什么(理想情况下不需要任何用户代理或操作系统嗅探) ?