【问题标题】:Is the 'scroll' event guaranteed to be fired when scrolling programatically?以编程方式滚动时是否保证会触发“滚动”事件?
【发布时间】:2017-05-20 08:26:08
【问题描述】:

在 Chrome 中,如果我有一个 onscroll 处理程序:

document.body.onscroll = function () {console.log('foo')}

...我以编程方式滚动文档:

document.body.scrollTop = 7

...然后onscroll 处理程序触发。

我能否在浏览器中依赖这种行为,或者某些浏览器只会触发由用户操作引起的滚动处理程序?这是在任何地方指定的吗?

【问题讨论】:

  • 你是指设置scrollTop吗?这可能(希望)会有所帮助...drafts.csswg.org/cssom-view/#dom-element-scrolltop
  • @Dom 不一定-我想scrollLeft 具有相同的行为。为什么?以及规范链接的意义是什么?
  • 我的错误,我提供了scrollTop 而不是onscroll 浏览器规范链接。 MDN 提供了他们的browser compatibility table,但只显示了对 edge/chrome 的支持,其他的还没有确定。我遇到了W3C's UI Events Spec,但它的状态已经过时了。如果我遇到任何相关规格,我会发布。

标签: javascript dom-events


【解决方案1】:

我仍然不知道 spec 对此有何说明(如果有的话),但我现在已经测试并确认处理程序 确实 在最新版本中触发的:

  • Chrome(桌面)
  • Chrome(移动)
  • 火狐
  • 边缘
  • Safari(桌面)

如果有你想测试的平台,在上面打开https://jsfiddle.net/14nckcw1/4/embedded/result/并等待;如果您在 1 秒后看到警报,则程序化滚动会触发该平台上的 onscroll 处理程序。我不知道有什么地方不是这样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多