2013-08-06 137 views
0

我正在使用scrollTop函數來檢測用戶距離屏幕底部多近以添加更多內容。我的javascript函數是這樣的:scrollTo呼叫速度太快

if ($(window).scrollTop() >= $(document).height() - $(window).height() - 75) { 
    var url = '<%=Url.Action("MoreView", "Status", new { id = ViewData["Id"], 
    page = Convert.ToInt32(ViewData["PageNumber"])+1 })%>'; 

      NextPage(url); //this does an ajax call to the action method on the server 

     } 

一切工作正常,問題是,window.ScrollTop> 75有時happeng 2或3次如此之快,它加載相同內容的2〜3倍。我可以通過在服務器端使用會話變量來解決這個問題,但不想走這條路線,因爲這可能會讓IMO變得醜陋。有什麼建議麼?

回答

0

現在,你會一直向同一個URL發送請求(每次都會產生相同的數據,除非我誤解你在做什麼)。一旦你解決這個問題,你可能會想你的包裹功能時,在debounce功能用戶滾動(我使用Underscore.js'這個例子debounce功能)被稱爲:

// Only call yourOnScroll once it hasn't been called 
// for more than 100 milliseconds 
yourOnScroll = _.debounce(youOnScroll, 100); 
+0

正如你看到的在var Url中設置爲爲當前的VideData [PageNumber]添加一個+1。在我的MVC動作中,這個VideData [PageNumber]被設置爲任何頁面變量通過。所以它應該在部分視圖的每個渲染上都有所不同,但是由於它發生得太快,部分視圖將具有相同的viewdata變量 – Jake

+0

@Jake - 因此,您要在此部分視圖中加載此代碼*然後? (如果是這樣,你確定問題出在你的JavaScript中,而不是在你的'MoreView'中......如果JavaScript只是在頁面/部分負載上執行,那麼它每次負載不會發生超過一次,對吧? ) –

+0

@ SeanVieira-是的,我正在加載我的部分視圖。我改變了觸發ajax調用的scrollTop來代替鏈接,並且它可以正常工作,而不需要使用點擊兩次加載相同的數據。但點擊加載頁面更多的內容是舊時尚,我試圖模仿Facebook的做法。 – Jake