在该代码中,我使用鼠标滚轮放大/缩小 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 | 事件详细信息 ------------------+----------------+------------ 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(可能错误) Chrome v37/OS X | 120 | 0 IE9/Win7 | 120 | 不明确的 Opera v11/OS X | 40 | -1 Opera v24/OS X | 120 | 0 Opera v11/Win7 | 120 | -3 火狐 v4/Win7 | 未定义 | -3 火狐 v4/OS X | 未定义 | -1 火狐 v30/OS X | 未定义 | -1
此外,即使在缓慢移动时,在 OS X 上使用 MacBook 触控板也会产生不同的结果:
- 在 Safari 和 Chrome 上,
wheelDelta
鼠标滚轮的值为 3 而不是 120。 - 在 Firefox
detail
上通常是这样2
,有时1
,但是当滚动非常缓慢时,根本没有事件处理程序触发。
所以问题是:
区分这种行为的最佳方法是什么(理想情况下没有任何用户代理或操作系统嗅探)?