.scroll()多久会一次火?

时间:2013-04-09 12:13:47

标签: javascript jquery html scroll setinterval

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

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

我有一个函数navCheck,由两部分组成,修复导航(如果您调整浏览器的大小以使其更窄,您将看到第二个)并选择哪个导航应占据“过度”状态。 / p>

我对jQuery很新,并且无法实现John的方法,它不像我放置变量的地方。所以我想我会在我的navCheck功能中加入一个setInterval来控制它发射的次数。但我无法承受左侧导航固定功能的间隔大于1毫秒,否则会出现明显的跳跃。

我想知道.scroll()默认触发的频率是多少,最好的选择是什么。我应该将我的功能的固定部分移动到一个单独的功能,并且每隔1ms进行一次火灾,然后保持我的功能的“过度”部分并每隔250ms进行一次火灾吗?或者只是保持整个事情每1ms发射一次?甚至比标准.scroll()

的性能提升还要高

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

2 个答案:

答案 0 :(得分:0)

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

其次无论响应是什么,它可能经常和快速,所以我肯定会尽可能地限制它而不影响用户体验(特别是在移动设备中保持处理器温度更好)。

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

答案 1 :(得分:0)

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

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

如果你的职能是精益的,在scroll|resize|mousemove|etc内,没有什么可以阻止你与他们联系。

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

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

你的民意调查除外。设置为60fps,或任何你想要的。
为了记录,几个浏览器实际上不会给你1ms,它们只会给你最小的间隔。