2011-06-05 87 views
1

我正在开发一个网站,当用户到达页面中的某些部分等时,将某些类添加到body中。因此,我必须将函数绑定到滚动事件。快速简单的jQuery滚动问题

是更好地缓存scrollTop()像这样(小例子,实际功能是更长的时间):

scrollcheck: function() { 

    var top = main.documentquery.scrollTop(); 

    if(top > 60) {stuff} 
    if(top > 220) {more stuff} 
在所有情况下

或者只是使用main.documentquery.scrollTop()

documentquery$(document),我记得那个缓存是好,但我不知道scrollTop()

+1

尝试http://jsperf.com/进行基准测试:) – addedlovely 2011-06-05 18:24:05

回答

0

是。最好存储该值,而不是每次调用它。

1

是的,最好是缓存它,但最好是调节这个函数的调用。这可能会对性能产生更大的影响。特别是,我将使用沿着这些路线超时模式:

(function() { 
    var _timeout = null; 
    function onScrollHandler() { 
     if (_timeout) { 
      clearTimeout(_timeout); 
     } 
     _timeout = setTimeout(function() { 
      _timeout = null; 
      realScrollcheck(); 
     }, 500); 
    } 
    $(window).scroll(onScrollHandler); 
})(); 

将会有你的功能(称为realScrollcheck这里)来运行最后滚动后半秒的延迟,而在病例99%这是可以接受的。在闲暇时调整超时时间。 :-)

+0

谢谢!我已经为重的东西做了这件事,我可能会尝试在该函数的其余部分以100ms的超时时间执行此操作,但由于它涉及使东西变得“固定”,因此它需要像素完美 – 2011-06-05 18:38:22