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

Rik*_*ard 2 javascript

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

event.deltaY = - 1/40 * originalEvent.wheelDelta;
Run Code Online (Sandbox Code Playgroud)

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

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

Ori*_*iol 6

为什么1/40?

Microsoft使用了旧版和非标准版MouseWheelEvent.

那个事件有一个wheelDelta属性,是(来源)

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

在IE上,该值通常为±120(来源)

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

该填充工具使用deltaMode1.那意味着(来源)

增量值以行指定.

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

然后,3 / 120给出那个1 / 40因素.

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

好吧,问题是(来源)

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

因此,填充工具集deltaXdeltaZ0.