车轮事件和"鼠标轮"的deltaY值

时间:2014-06-18 05:59:54

标签: javascript

MDN's polyfil查看DOM3 wheel事件,我找到了这一行:

event.deltaY = - 1/40 * originalEvent.wheelDelta;

在polyfil中,不支持dom3事件(wheel)的浏览器的event对象被赋予deltaY
这个比例1/40 * wheelDelta是如何计算的?为什么1/40

如果我要为我的库创建一个类似的polyfil,并希望将delta信息传递给事件对象,我是否应该同时添加deltaX和deltaZ?是否适用相同的比例?

1 个答案:

答案 0 :(得分:6)

为什么选择1/40?

Microsoft使用旧版和非标准MouseWheelEvent

该事件具有wheelDelta属性,即(source

  

一个抽象值,表示车轮转动的距离。

在IE上,该值通常为±120(source

  

该值与WM_MOUSEWHEEL或的delta值相同   WM_MOUSEHWHEEL。这意味着如果鼠标滚轮不支持高   分辨率滚动,每个陷阱的值为120。该值不会更改   即使系统设置的滚动量是页面滚动。

polyfill使用deltaMode 1。这意味着(source

  

delta值以行指定。

一次滚动的默认行数为3(至少在Windows上)。您可以在控制面板中更改此数字 - >鼠标 - >轮标签。

然后,3 / 120会提供1 / 40因素。

相同的比例适用于其他轴吗?

嗯,问题是(source

  

IE和Opera(Presto)仅支持wheelDelta属性,不支持水平滚动。

因此,polyfill将deltaXdeltaZ设置为0