2012-10-06 115 views
2

我正在使用jquery.window.scroll函數與這些代碼無限加載。jQuery無限滾動雙加載

$(window).scroll(function(){ 
    if ($(window).scrollTop() == $(document).height() - $(window).height()){ 
     var page = $('#lastPostsLoader').attr('page')*1; 
     $('#lastPostsLoader').attr('page', page + 1); 
     DataLoadFunction(page); 
    } 
}); 

但是,當滾動到底部時,這些代碼會請求雙倍的時間,有時會出現錯誤的頁面。喜歡這個;

滾動底部--->加載頁面1和加載頁面2 --->滾動底部--->加載頁面3和加載頁面2 --->滾動底部--->加載頁面4加載頁面5 ........

那麼我錯在哪裏?謝謝...

+2

當頁面編號發生變化時,您可能希望將標誌設置爲true,然後在「DataLoadFunction」完成後將其設置爲false。否則,如果您滾動到底部,然後再次滾動,它會兩次調用該函數(如果您滾動更多,則會多次調用該函數)。我遇到過類似的問題,並使用了一個標誌爲我工作。然後你會在你的if語句中檢查'!loading',假設你的標誌叫做'loading'。 – ClarkeyBoy

回答

4

你應該防止dataload,直到下一個數據到達。在從服務器加載數據時將變量isLoadingData設置爲true。

var isLoadingData; 
$(window).scroll(function(){ 
     if (($(window).scrollTop() == $(document).height() - $(window).height()) && !isLoadingData){ 
       isLoadingData = true; 
      var page = $('#lastPostsLoader').attr('page')*1; 
      $('#lastPostsLoader').attr('page', page + 1); 
      DataLoadFunction(page, function(){ // callback get called after data load 
         isLoadingData = false; 
      }); 
     } 
    }); 
+0

仍然是同樣的問題... – pheaselegen

+0

我建議你試試$(window).unbind('scroll')。scroll。綁定前解除滾動。這可能是滾動窗口附加了兩次。 – Anoop

+1

好的。我修改了ajax負載目標divs,並且我使用了你的解決方案。所以真正運行良好...謝謝.. – pheaselegen