在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?是否适用相同的比例?
答案 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将deltaX
和deltaZ
设置为0
。