【发布时间】:2011-07-28 12:12:53
【问题描述】:
对于a different question,我编写了this answer,包括this sample code。
在该代码中,我使用鼠标滚轮放大/缩小 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 上滚动相同数量的鼠标滚轮时,我可以使用什么代码获得相同的“增量”值?
This question 是相关的,但没有好的答案。
编辑:进一步调查显示,一个滚动事件“向上”是:
| evt.wheelDelta | evt.detail ------------------+----------------+------------ Safari v5/Win7 | 120 | 0 Safari v5/OS X | 120 | 0 Safari v7/OS X | 12 | 0 铬 v11/Win7 | 120 | 0 铬 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 歌剧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,但是当滚动非常缓慢时根本不会触发事件处理程序。
所以问题是:
区分这种行为的最佳方法是什么(最好没有任何用户代理或操作系统嗅探)?
【问题讨论】:
-
抱歉,我删除了我的问题。我现在正在写一个答案。在我进一步讨论之前,您是在谈论 Mac OS X 上 Safari 上的滚动吗?当您滚动一点时,它会滚动一点,但是如果您保持恒定的速度,它会逐渐变快?
-
@Blender 我现在正在 OS X 上进行测试,是的,Safari 是异常值,它的缩放速度比 Chrome 快 20 倍。不幸的是,我没有连接物理鼠标,所以我的测试仅限于用两根手指滑动约等距离和速度。
-
我更新了这个问题,详细介绍了 OS X 和 Win7 中排名前 5 位的浏览器的行为。这是一个雷区,OS X 上的 Chrome 似乎是有问题的异常值。
-
@Phrogz 不应该是
e.wheelDelta/120吗? -
@ŠimeVidas 是的,我复制和使用的代码显然是错误的。你可以在my answer below看到更好的代码。
标签: javascript mousewheel