bob*_*obb 19 javascript scroll mousewheel internet-explorer-9 internet-explorer-10
我知道可以上下检测,例如
function handle(delta) {
if (delta < 0) {
alert('down');
} else {
alert('up');
}
}
function wheel(event){
var delta = 0;
if (!event) event = window.event;
if (event.wheelDelta) {
delta = event.wheelDelta/120;
} else if (event.detail) {
delta = -event.detail/3;
}
if (delta)
handle(delta);
if (event.preventDefault)
event.preventDefault();
event.returnValue = false;
}
/* Initialization code. */
if (window.addEventListener)
window.addEventListener('DOMMouseScroll', wheel, false);
window.onmousewheel = document.onmousewheel = wheel;?
Run Code Online (Sandbox Code Playgroud)
但有没有办法用鼠标滚轮检测用户的鼠标是向左还是向右?
rob*_*cat 48
Internet Explorer:在IE9和IE10中,你必须使用onwheel
事件(不是onmousewheel,也不是DOMMouseScroll)addEventListener
来检测从DOM滚动的水平滚轮.使用该event.deltaX
值和event.deltaMode
值来检测水平鼠标滚动(对于垂直滚动使用该event.deltaY
值).对于<= IE8,请使用onmousewheel
事件和event.wheelDelta
(仅支持旧版IE的yaxis鼠标滚轮).
Blink/Webkit:自Chrome31/Safari 7开始支持onwheel活动.否则,使用该onmousewheel
事件和event.wheelDeltaX
与event.wheelDeltaY
性能.仅限Chrome/Safari技巧:使用SHIFT键,鼠标滚动向左/向右滚动(对测试很有用).
Firefox:Firefox 17及更高版本支持onwheel事件.要支持旧版本的Firefox(返回3.6),请使用现已弃用DOMMouseScroll
的event.axis和event.detail属性来支持水平滚动.(Firefox mobile:文档暗示在使用触摸设备进行平移时会发生onwheel事件.我没有尝试过.)Firefox也有一个MozMousePixelScroll
活动.MDN文档还提供了建议的代码来处理跨浏览器的不同事件.Firefox还有一个mousewheel.enable_pixel_scrolling配置,可能会影响所有不同的轮子事件.
使用QuirksMode的车轮事件测试仪自行尝试onwheel事件.我可以看到这在Win7上使用IE9,在Windows 8上使用IE10(发布预览,IE版本10.0.8400.0).要设置新标准的轮盘事件:
在W3C规范中,微软IE9文档中的MouseWheel
事件和MDN文档指定onwheel
事件:
deltaX
- 获取鼠标滚轮围绕x轴(水平)旋转的距离.deltaY
- 获取鼠标滚轮围绕y轴(垂直)旋转的距离.deltaZ
- 获取鼠标滚轮绕z轴旋转的距离.deltaMode
- 获取一个值,该值指示增量值的度量单位:
DOM_DELTA_PIXEL
(0x00)默认.增量以像素为单位测量.DOM_DELTA_LINE
(0x01)增量是以文本行来衡量的.DOM_DELTA_PAGE
(0x02)增量是以文本页面来衡量的.编辑:确保你没有event.ctrlKey
阻止默认()事件如果设置,否则你可能会阻止页面缩放.如果你在Chrome和IE中的触摸板上使用双指缩放,显然ctrlKey也会设置为true.
IE中的特征检测很困难:
'onwheel' in document
返回true但似乎没有为水平或垂直onwheel事件触发事件.'onwheel' in document
返回false但是onwheel事件有效(我想document.documentMode === 9
在IE9中使用onwheel事件之前应该检查).document.onwheel = 'somefunc(event)'
似乎甚至在documentMode 9或10中都不起作用(即看起来你只能使用addEventListener).要进行测试,请使用Microsoft倾斜滚轮鼠标,滚动触摸板(手势或区域)或Apple设备(魔术鼠标或强大的鼠标滚动球).在Windows中使用各种鼠标或触摸板设置(或OSX上的鼠标首选项,如果使用Safari测试OSX上的水平滚动).
对于所有浏览器,delta值的符号与onwheel和onmousewheel具有相反的符号.在IE中,例如,对于onwheel和onmousewheel,delta值是不同的(使用带有非常标准的Microsoft鼠标的IE9的dev机器):
event.deltaY
在Win8上是111,在Win7上是72,因为onwheel
事件向下滚动一个档次.该值随着缩放而略有变化,但还有一些其他因素,我无法解决(似乎不是字体大小).event.wheelDelta
onmousewheel
事件向下滚动一个等级是-120 .
对于Windows XP"我们必须添加对WM_MOUSEHWHEEL
消息的支持以使其工作[,支持]在Vista中添加,因此如果您使用的是XP,则需要安装IntelliType Pro和/或IntelliPoint" - 根据本文.
在DOMMouseWheel
Firefox中的事件有一个axis
属性.
mousewheel
Chrome中的活动有wheelDeltaX
和wheelDeltaY
.
可悲的是,我找不到任何等效的IE事件(在IE9上测试).
归档时间: |
|
查看次数: |
14448 次 |
最近记录: |