【问题标题】:How can I get Firefox to fire onscroll once, as Chrome does, per scroll "action.?"我怎样才能让 Firefox 在每次滚动“动作”时像 Chrome 一样触发一次 onscroll?
【发布时间】:2015-12-06 04:49:27
【问题描述】:

我一直致力于在没有任何 JavaScript 库(如 JQuery)的大多数浏览器上使用“浮动然后修复”导航栏。

它适用于 Chrome,但我在 FF 中有一个小问题,这似乎是由于当您执行“滚动操作”时 FF 多次触发 onscroll - PdDn、PdUp、上下箭头键、上下箭头在滚动条上,点击滚动条等。

Chrome 只触发一次,但 FF 先触发多次,尖齿的多少取决于网页的长度和您当前的位置。

有没有办法让 FF 像 Chrome 一样只触发一次?

我会发布一个test page,它可以让您通过将“scroll”记录到控制台来查看 onscroll 触发的次数。它应该在大约 10 分钟内完成。我会在页面上放回这个问题的链接。

页面顶部会有一些cmets解释如何使用它。

当您执行“滚动操作”时,是否有人对只获得一个 onscroll 事件有任何想法?

【问题讨论】:

  • 在 Firefox 中关闭平滑滚动可以解决问题 - 此外,在我的 Chrome 中,PgDn/PUp、Up、Down 等也会触发多个事件 - 直到我也关闭平滑滚动 - chrome: //标志/#enable-smooth-scrolling

标签: javascript html google-chrome onscroll


【解决方案1】:

你可以这样做:

var timer = null;
function action(){
  // do stuff on scroll
}

function onscroll(e){
  clearTimeout(timer);
  timer = setTimeout(action.bind(this, e), 100);
}

这样,它只会在 100 毫秒的空闲时间后触发滚动事件,这可能是也可能不是您需要的。您可能需要调整超时延迟以获得最佳结果。

【讨论】:

    猜你喜欢
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多