【问题标题】:How often does .scroll() fire?.scroll() 多久触发一次?
【发布时间】:2013-04-09 20:43:19
【问题描述】:

我正在这里建立我的网站:argit.bounde.co.uk

我了解使用$(window).scroll(); 是不好的,因为这可能会导致某些浏览器出现问题,并且已阅读at this blog post 了解它可能导致的问题。

我有一个函数navCheck,它由两部分组成,修复导航(如果你调整浏览器的大小使其变窄,你会看到第二部分)和选择哪个导航应该占据“over”状态。

我对 jQuery 很陌生,无法实现 John 的方法,它不喜欢我放置变量的位置。所以我想我会在我的 navCheck 函数中包含一个setInterval 来控制它触发的次数。但我不能让左侧导航固定功能的间隔大于 1 毫秒,否则会有明显的跳跃。

我想知道 .scroll() 默认触发的频率是多少,以及什么是最好的选择。我是否应该将我的函数的固定部分移动到一个单独的函数并每 1ms 触发一次,然后保留我的函数的“over”部分并每 250ms 触发一次?或者只是让整个事情每1ms触发一次?这甚至比标准的 .scroll() 性能有所提高

或者同样,如果您可以帮助我实施 Johns 解决方案,这也是向前迈出的一步,因为这应该会更好,但我不明白我将如何实施它。

【问题讨论】:

  • 对我来说通常是按像素计算的?
  • 这看起来像是CSS Media queries 的工作!让浏览器原生地进行所有的宽度计算。所有现代浏览器support them

标签: javascript jquery html scroll setinterval


【解决方案1】:

你真的不需要计数。答案是“很多”,并且是特定于实现的。

您的目标应该是通过滚动设置状态,然后使用 setTimeout 在循环中检查该状态。

如果您的功能很精简,那么在 scroll|resize|mousemove|etc 内部,没有什么可以阻止您使用它们。

但是当我说“精益”时,我的意思是

window.onscroll = function (e) {
    screen_obj.x = ...;
    screen_obj.y = ... ;
};

在此之外进行投票。将其设置为 60 fps,或任何您想要的。
作为记录,有几个浏览器实际上不会给你 1 毫秒,它们只会给你最小的间隔。

【讨论】:

    【解决方案2】:

    我不知道确切的答案,但我会做的是每次触发一个 console.log 语句,以了解实际用例中会发生什么。

    其次,无论响应速度如何,它可能非常频繁且快速,因此我肯定会在不影响用户体验的情况下尽可能多地调节它(最好让处理器保持凉爽,尤其是在移动设备中)。

    也就是说我不会使用 setInterval() 来限制它。我不会在这里描述整个问题,使用 setTimeout 创建一个限制递归函数只是一个最佳实践,甚至还有 sn-ps 和插件更进一步,比如去抖动:https://code.google.com/p/jquery-debounce/

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 1970-01-01
      • 2018-02-26
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      相关资源
      最近更新 更多