【问题标题】:What's the difference between "onwheel" and "onscroll" events?“onwheel”和“onscroll”事件有什么区别?
【发布时间】:2017-03-10 03:52:43
【问题描述】:

当我尝试更改默认滚动条属性时,我发现为scroll()onscroll事件重写回调函数并不方便,我应该为“onwheel”事件重写一个回调函数。

那么onwheelonscroll 到底有什么区别?我想浏览器默认的onwheel处理程序会自动触发onscroll函数来移动滚动条,这就是为什么onwheel的回调中的preventDefault会阻止滚动条移动。我对吗?谁有更好更具体的解释?

【问题讨论】:

  • onwheel?我以前从没见过这个o.O
  • MDN about onwheel: "非标准 此功能是非标准的,不在标准轨道上。请勿在面向 Web 的生产站点上使用它:它不适用于每个用户。实现之间也可能存在很大的不兼容性,并且将来行为可能会发生变化。”
  • onwheel 不是标准的,并非所有浏览器都支持它。它不会捕获通过箭头、空格键等滚动。
  • 只是 'wheel' 似乎是标准实现。不同之处在于,当使用鼠标或其他输入设备上的滚轮时,滚轮会触发。滚动会在您滚动时触发,无论是使用滚轮还是通过单击滚动箭头或使用滚动手或其他方式。
  • CMIW 看起来 Cerberus 评论不再适用。 html.spec.whatwg.org/multipage/webappapis.html#handler-onwheel

标签: javascript jquery browser


【解决方案1】:

onwheel 特别在鼠标滚轮旋转时触发。 onscroll 触发任何类型的滚动,包括键盘按钮,如箭头键、Home、End、Page Up、Page Down、空格键、制表符等。

请注意,onwheel 是非标准的,应避免使用,除非您专门针对支持它的浏览器和/或提供不会感觉到缺席的额外功能。

【讨论】:

  • 为什么页面会在 wheel 或 onwheel 触发时滚动,而如果 wheel 或 onwheel 被阻止则默认不会滚动?如果在wheel的默认行为中触发,是否意味着滚动?
  • 是的。这与单击链接并调用preventDefault() 阻止导航的原因相同。 onwheel 的默认行为是滚动页面。
【解决方案2】:

onwheel:当鼠标滚轮在元素上向上或向下滚动时发生。

onscroll 在滚动元素的滚动条时发生。

请务必注意,在 Internet Explorer 中,滚轮事件仅通过 addEventListener 支持。不能使用onwheel 事件属性。

onwheel 在 Safari 或 IE8 或更早版本中不起作用。

【讨论】:

    【解决方案3】:

    MDN about onwheel:

    非标准
    此功能是非标准的,不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不适用于每个用户。实现之间也可能存在很大的不兼容性,并且行为可能会在未来发生变化。

    滚动鼠标滚轮时会触发onwheel 事件。这种物理动作可能会也可能不会导致滚动事件。

    基本上,onscroll 就是您所需要的。

    【讨论】:

      【解决方案4】:

      onwheel 事件在滚动和缩放时触发,当您移动鼠标滚轮时,onscroll 事件仅在元素的滚动条被滚动时发生(我相信这也包括触摸滚动)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-12
        • 2011-02-11
        • 2013-03-04
        • 2010-11-09
        • 2013-08-29
        • 2022-07-28
        • 2012-01-27
        相关资源
        最近更新 更多