使用JavaScript检测在x轴上滚轮(左,右)(Detecting mousewheel on

2019-06-25 00:11发布

我知道这是可以检测上下例如

    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;​

但有一种方式,如果用户的老鼠就向左或向右鼠标滚轮来检测?

Answer 1:

  • DOMMouseWheel在Firefox事件具有axis属性。

  • mousewheel在Chrome事件具有wheelDeltaXwheelDeltaY

  • 可悲的是,我无法找到IE事件的任何等价物属性格式(测试IE9上)。



Answer 2:

Internet Explorer中 :在IE9中,并IE10你必须使用onwheel事件(不是onmousewheel,也不DOMMouseScroll)使用addEventListener能够从DOM检测水平滚轮滚动。 使用event.deltaX值与沿着event.deltaMode值来检测水平鼠标续流(对于垂直续流使用event.deltaY值)。 为<= IE8使用onmousewheel事件和event.wheelDelta (仅Y轴鼠标续流支持较旧版本的IE)。

眨眼/ Webkit的 :因为铬31/7的Safari为onwheel事件支持。 否则,使用onmousewheel事件和event.wheelDeltaXevent.wheelDeltaY性能。 镀铬/ Safari浏览器只招:使用Shift键的同时滚动mousewheeling左/右(用于测试)。

火狐 :火狐17和更高的支持onwheel事件 。 为了支持老版本的Firefox(回3.6)的使用现在已经过时, DOMMouseScroll和event.axis和event.detail属性,以支持水平滚动。 (火狐移动:将文档暗示使用触摸设备平移时onwheel事件将触发我还没有尝试过)。 火狐也有MozMousePixelScroll事件。 该MDN文档还给出了建议的代码来处理跨浏览器的不同的事件。 火狐也有mousewheel.enable_pixel_scrolling配置可能会影响所有不同的轮事件。

尝试自己onwheel事件使用从怪异模式车轮的事件测试。 我可以看到这方面的工作Win7上使用IE9,IE10和Windows 8上的(发行预览版,IE版本10.0.8400.0)。 要设置新标准onwheel事件:

  • 选择的addEventListener(捕获)无线电。
  • 取消选中滚动。
  • 取消选中鼠标滚轮。
  • 离开轮选中。
  • 在右列的底部勾选显示事件属性。
  • 使用F12,并确认该文件是在documentMode IE9标准或IE10标准。
  • 请在中心柱的一些鼠标旋转着,看到车轮事件被记录在左边的列,轮事件的详细信息显示在右列的底部。
  • 有时你可能需要取消选中并retick轮事件复选框以获取事件(不知道为什么?也许错误在怪异模式页面或IE)

在W3C规范中, 微软IE9文档中的MouseWheel事件和MDN文档指定onwheel事件:

  • deltaX -获取鼠标滚轮已经绕x轴(水平)而旋转的距离。
  • deltaY -获取鼠标滚轮已绕y轴(垂直)转动的距离。
  • deltaZ -获取鼠标滚轮已经绕z轴旋转的距离。
  • deltaMode -获取一个值,指示测量增量值的单元:
    • DOM_DELTA_PIXEL (0×00)默认。 增量以像素计量。
    • DOM_DELTA_LINE (0×01)的差是在文本行测量。
    • DOM_DELTA_PAGE (0×02)的差是在文本的页面测量。

编辑:请确保你不preventDefault()方法的情况下,如果event.ctrlKey设置,否则你可能会阻止页面缩放。 显然也如果您在Chrome和IE触摸板使用捏缩放与ctrlKey设置为true。

特征检测是困难的IE:

  • 在IE10与IE8 documentMode, 'onwheel' in document返回true,但似乎没有事件进行水平或垂直onwheel触发的事件。
  • 在IE9 'onwheel' in document返回false但onwheel事件的工作(我猜document.documentMode === 9应在IE9使用onwheel事件之前进行检查)。
  • 在IE9和IE10传统document.onwheel = 'somefunc(event)'似乎并不甚至在documentMode 9或10工作(即看起来像你只能使用的addEventListener)。

为了测试,使用Microsoft tiltwheel鼠标,滚动触控板(手势或区域),或苹果设备(魔术鼠标或Mighty Mouse鼠标scrollball)。 各种鼠标或触摸板设置在播放窗口(或鼠标的喜好在OSX如果使用Safari的OSX测试水平滚动条)。

增量值的符号有onwheel onMouseUp和onMouseWheel对于所有浏览器的符号相反。 在IE中δ值,例如(使用我的dev机IE9具有非常标准的Microsoft鼠标)是用于onwheel onMouseUp和onMouseWheel不同:

  • event.deltaY为111上的Win8或72上的Win7为onwheel事件向下滚动一个凹口。 该值与变焦稍有变化,但有参与以及我不能工作了(似乎并没有被字体大小)其他一些因素。
  • event.wheelDelta为-120为onmousewheel事件向下滚动一个缺口。

  • 对于Windows XP“我们必须添加的支持WM_MOUSEHWHEEL消息,使这项工作[,支持]在Vista中添加,所以如果你使用的是XP,你需要的IntelliType Pro和/或安装的IntelliPoint” -按照这篇文章 。

  • 各种常见的触摸板和鼠标驱动胸围鼠标滚轮支持的浏览器,例如破碎的浏览器检测,或使用WM_HSCROLL和WM_VSCROLL消息代替WM_MOUSEWHEEL和WM_MOUSEHWHEEL消息。 所以,所以司机不会产生在浏览器轮事件(不管你使用哪种浏览器,或哪个版本的Windows您使用的)。 一个用于WM_VSCROLL搜索的Bugzilla显示了可能影响任何浏览器(不只是Firefox)的问题。


Answer 3:

我相信你可以找到的“水平”或x轴数据

event.originalEvent.wheelDeltaX

你应该调试代码,并看到事件对象具有在运行什么样的属性。 这应该确认或者如果该属性存在否认。 从那里,它仅仅是一个如果所述值不同检测物质。



Answer 4:

检查更多的链接和信息接受的答案。

冒泡滚动/鼠标滚轮事件

event.detail指定“滴答”鼠标滚轮移动的数目。

正值表示向下/右”,负上/左。

event.axis指定滚动手势(水平或垂直)的轴线。 在Firefox 3.5中添加了此属性

Chrome浏览器实现了相同的行为IE AFAIK。 在IE和Chrome:使用e.wheelDeltaXe.wheelDeltaY



Answer 5:

IE浏览器支持所有的人: 鼠标滚轮| onmousewheel其是事件处理程序以及WheelEvent (提供DeltaXDeltaYDeltaZ ),这是标准的事件和MouseWheelEvent接口 ,其也支持在IE9 +(与WheelDelta和其他的数xy坐标相关的属性)。

测试在IE11。

相关:当触摸事件标准终于得到正式的今天,竟然IE11已经支持大部分: http://blogs.msdn.com/b/ie/archive/2015/02/24/pointer-events-w3c-recommendation -interoperable-触摸和去除最可怕-300ms的抽头-delay.aspx 。

旁白:@bob_cobb,你可能想重温你的答案批准赞成的多数投票支持最丰富的一个细节 。 这有助于未来的访客找到正确的信息,并显示出你甚至关心社区!



文章来源: Detecting mousewheel on the x-axis (left and right) with Javascript