在该代码中,我使用鼠标滚轮来放大/缩小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上以相同数量的鼠标滚轮滚动获得相同的“增量”值?
这个问题是相关的,但是没有很好的答案。
编辑:进一步的调查显示一个滚动事件“向上”是:
| 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 Firefox v4 / Win7 | 未定义 -3 Firefox v4 / OS X | 未定义 -1 Firefox v30 / OS X | 未定义 -1
此外,即使在缓慢移动的情况下,在OS X上使用MacBook触控板也会产生不同的结果:
- 在Safari和Chrome上,
wheelDelta
鼠标滚轮的值为3而不是120。 - 在Firefox上,这
detail
通常是2
有时的1
,但是当滚动速度非常慢时,根本没有事件处理程序会引起火灾。
所以问题是:
区分这种行为的最佳方法是什么(理想情况下,无需任何用户代理或OS嗅探)?
e.wheelDelta/120
吗?