的Internet Explorer:使用addEventListener
在IE9和IE10你必须使用onwheel
事件(不是onmousewheel,也不DOMMouseScroll),以便能够从DOM检测水平滚轮滚动。使用event.deltaX
值和event.deltaMode
值来检测水平鼠标滚轮(对于垂直滚轮使用event.deltaY
值)。对于< = IE8使用onmousewheel
事件和event.wheelDelta
(仅适用于旧IE版本的yaxis鼠标轮)。
Blink/Webkit:支持自Chrome 31/Safari 7以来的onwheel事件。否则使用onmousewheel
事件和event.wheelDeltaX
和event.wheelDeltaY
属性。 Chrome/Safari的唯一诀窍:在鼠标滚动向左/向右滚动时使用SHIFT键(用于测试)。
Firefox:Firefox 17及更高版本support the onwheel event。要支持旧版本的Firefox(回到3.6),请使用现在已弃用的DOMMouseScroll
以及event.axis和event.detail属性来支持水平滚动。 (Firefox移动版:文档暗示使用触摸设备进行平移时,onwheel事件会触发,但我没有尝试过)。 Firefox也有一个MozMousePixelScroll
事件。 MDN文档还提供了建议的代码来处理跨浏览器的不同事件。 Firefox也有一个mousewheel.enable_pixel_scrolling配置,可能会影响所有不同的轮子事件。
Try the onwheel event out yourself使用来自QuirksMode的车轮事件测试器。我可以看到这个工作在Win7上使用IE9,在Windows 8上使用IE10(发布预览版,IE版本10.0.8400.0)。设置新的标准轮循事件:
- 选择addEventListener(capture)radio。
- 不可滚动滚动。
- 解开鼠标滚轮。
- 让车轮打勾。
- 勾选右列底部的显示事件属性。
- 使用F12并确认文档处于documentMode IE9标准或IE10标准。
- 做一些鼠标在中心列上滚动,看到轮盘事件记录在左栏,轮子事件详细信息显示在右栏底部。
- 有时你可能需要取消选中并retick轮事件复选框以获取事件(不知道为什么:也许错误在怪异模式页面或IE?)
的W3C specification,该Microsoft IE9 documentation for the MouseWheel
event和MDN docs指定onwheel
事件:
deltaX
- 获取鼠标滚轮已经绕x轴(水平)而旋转的距离。
deltaY
- 获取鼠标滚轮围绕y轴旋转的距离(垂直)。
deltaZ
- 获取鼠标滚轮围绕z轴旋转的距离。
deltaMode
- 获取一个值,指示测量单位为增量值:
DOM_DELTA_PIXEL
(0×00)默认值。增量以像素为单位进行衡量。
DOM_DELTA_LINE
(0x01)增量以文本行进行度量。
DOM_DELTA_PAGE
(0x02)增量以文本页面为单位进行测量。
编辑:确保你不preventDefault()方法的情况下,如果event.ctrlKey
设置,否则你可能会阻止页面缩放。显然,如果你在Chrome和IE的触摸板上使用捏缩放,ctrlKey设置为true。
特征检测很难在IE:
- 在IE10与IE8 documentMode,
'onwheel' in document
返回true,但似乎没有事件进行水平或垂直onwheel触发的事件。
- 在IE9中
'onwheel' in document
返回false但onwheel事件起作用(我猜应该在使用IE9中的onwheel事件之前检查document.documentMode === 9
)。
- 在IE9和IE10中,传统的
document.onwheel = 'somefunc(event)'
在documentMode 9或10中似乎不起作用(即看起来像只能使用addEventListener)。
要进行测试,请使用微软的tiltwheel鼠标,滚动触摸板(手势或区域)或Apple设备(魔术鼠标或强大的鼠标滚动球)。在Windows中使用各种鼠标或触控板设置进行播放(或者如果使用Safari在OSX上测试水平滚动,请在OSX上使用鼠标偏好设置)。
delta值的符号对于所有浏览器的onwheel和onmousewheel都有相反的符号。在IE中δ值,例如(使用我的dev机IE9具有非常标准的Microsoft鼠标)是用于onwheel onMouseUp和onMouseWheel不同:
你想知道'鼠标'或'鼠标滚轮'是向左还是向右?并非所有鼠标滚轮都左右移动。 – aglassman
@aglassman好问题。只是鼠标滚轮。 –
@bob_cobb,你可能想重新审视你的批准答案,以[最投人最丰富的细节之一](http://stackoverflow.com/a/12850780/1712065)。这有助于未来的访问者找到正确的信息,并向你展示你甚至关心社区! – Annie