2014-10-09 77 views
0

我想做一個無限的滾動頁面,但我有一個問題。運行功能,禁用滾動,但在回調啓用

loadElements作品與$.get,像這樣:

loadElements: function() { 
    // fades out page 
    $.get(//..).done(function() {// fades in page}); 
} 

和滾動:

$(window).scroll(function() { 
    Functions.loadElements(); 
}); 

我想是在滾動運行Functions.loadElements();一次,等待// fades in page,然後重新啓用再次滾動。我試過bind/unbind,但沒有成功。我怎樣才能做到這一點?

編輯:

我嘗試使用bindunbind這樣的:

$(window).scroll(function() { 
    Functions.loadElements(); 
    $(window).unbind('scroll'); 
} 

loadElements

loadElements: function() { 
    // fades out page 
    $.get(//..).done(function() {// fades in page; $(window).bind('scroll'); }); 
} 

但沒有奏效。

+0

綁定返回get承諾/解除綁定應該是你在找什麼,根據你的問題,爲什麼不這樣做,你嘗試了什麼?另一種選擇是防止默認事件。 – 2014-10-09 09:33:20

+0

我在使用'bind'的問題中放了一個代碼示例。 – 2014-10-09 09:35:14

回答

0

我不能給你一個確切的解決方案。但嘗試這樣的事情。您可以使用全局變量保持狀態。

var isLoading = false; 

    $(window).scroll(function(e) { 
     if(!isLoading) 
     { 
      Functions.loadElements(); 
      isLoading = true; 
     } 
     e.preventDefault(); 
    } 

    loadElements: function() { 
     // fades out page 
     $.get(//..).done(function() {// fades in page; isLoading = false; }); 
    } 
+0

加載後它不會更改爲「false」。 – 2014-10-09 09:56:31

+0

isLoading變量的某個時間範圍可能不正確。所以請嘗試在isLoading變量之前刪除var前綴。 – 2014-10-09 10:02:11

0

也許不是重新綁定包含邏輯的滾動函數,嘗試綁定一個「禁用」滾動功能,然後在內容準備好再次滾動時刪除此功能。您可以使用jquery namespace events這個

嘗試

$(window).scroll(function() { 
    Functions.loadElements(); 
    $(window).bind('scroll.StopScroll', function (e) { 
     e.preventDefault(); e.stopImmediatePropagation(); 
    }); 
} 

然後在.done解除綁定

$(window).unbind('scroll.StopScroll'); 
0

我與get承諾

var waiting; 
$(window).scroll(function(e) { 
    if(waiting){ 
     e.preventDefault(); 
     return; 
    } 
    Functions.loadElements().then(function(){ 
     waiting = false; 
    }); 

    waiting = true; 
}); 

做到這一點,從loadElements

loadElements: function() { 
    // fades out page 
    return $.get(...).done(function() {...}); 
}