2013-05-28 63 views
1

我有用於加載數據的代碼。當用戶向下滾動一半屏幕時,它將繼續加載數據並將HTML附加到文檔中。 The problem is $(window).height() doesn't update on the fly after HTML changes所以條件表達式出錯了。如何解決它?

// Check scrollbar is down a half. 
$(window).scroll(function() { 
    console.log("flag: " + flag);  
    console.log($(window).scrollTop()); 
    console.log($(window).height()); 

    if (($(window).scrollTop() > $(window).height()/2)) { 
     if(flag == 0) { 
      console.log("Load data"); 
      loadData(globalIndex, globalCount); 
      globalIndex += 40; 
     } 
     flag = 1; 

    } else { 
     flag = 0; 
    } 
}); 
+0

試試這個插件:https://gist.github.com/elclanrs/5514942。你可以設置'offset'和其他一些選項,就像1k縮小一樣。 – elclanrs

+0

我想也許你想'$(document).height()' – Barmar

+0

順便說一句,訣竅在這裏:'endOfPage = $(doc).height() - $(win).height(); if($(win).scrollTop()> = endOfPage - offset)' – elclanrs

回答

1
$(window).height() 

會給你瀏覽器的高度(除非你調整你的窗口,這是不變的)。嘗試使用:

$(document).height() - ($(window).height()/2); 

,而不是...

2

你的窗口的高度是不會改變的,除非你調整瀏覽器屏幕。公式的問題是,爲了使其工作,您需要加載足夠的數據以將滾動條移回到中點以上。如果你不這樣做,這個公式將不斷返回true,並且你將調用loadData的次數遠遠多於你所關心的次數。

作爲潛在的解決方法(取決於加載數據需要多長時間),您可以在滾動條到達窗口底部時調用loadData。這種情況的真實情況遠不如現在的那種頻繁,並且只有在用戶試圖查看時纔會加載數據。如果數據加載速度很快,那麼這是一個簡單的解決方案。如果這是一個耗時的過程,這就是您選擇在中途點加載數據的原因,那麼請考慮一次加載更多數據,幷包含微調器或其他視覺線索,以通知用戶數據是加載。

相關問題