5

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

我知道使用它是不好的,$(window).scroll();因为它可能会导致某些浏览器出现问题,并且已在此博客文章中阅读了它可能导致的问题。

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

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

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

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

4

2 回答 2

1

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

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

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

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

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

在此之外进行民意调查。将其设置为 60fps,或任何您想要的。
为了记录,几个浏览器实际上不会给你 1ms,他们只会给你最小的间隔。

于 2013-04-09T12:43:19.537 回答
0

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

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

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

于 2013-04-09T12:26:56.547 回答