2011-06-05 104 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