2014-11-06 73 views
1

我正在寫我自己的圖像懶加載函數,當div滾動到其底部,我們加載一些新的圖像,容器div的高度(#ScrollDiv在這個案件)增加,當我們再次滾動到底部時,我們進行相同的調用。雖然我在每次請求更多圖像(這稱爲appName.featureName.PaginationConstant和父範圍)中傳遞「分頁ID」,但我想移除或凍結滾動事件,因此我們不會提出其他請求或增加分頁ID。例如:刪除並添加滾動事件處理程序使用jQuery .off或.unbind

appName.featureName.lazyLoader = function() { 

    var currentScroll = $(this).scrollTop(), 
     divHeight = $(this)[0].scrollHeight, 
     actualHeight = $(this).height() + parseInt($(this).css('padding-bottom')) 

    // have we hit the bottom of the Scroll Div? 
    if((divHeight - actualHeight) <= currentScroll) { 
     // yes we have, remove the scroll, see I name this function below 
     $('#ScrollDiv').off('scroll', appName.featureName.lazyLoader); 
     // Now get more photos, in the function below I shall re-bind the scroll functionality 
     appName.featureName.getMorePhotos(++appName.featureName.PaginationConstant); 
    } 

}; 

// this is the lazyload funtion 
appName.featureName.lazyLoad = function() { 
    $('#ScrollDiv').on('scroll', appName.featureName.lazyLoader); 
}; 

除了解綁,一切都很好用!我仍然能夠觸發滾動事件處理程序,儘管事實上我試圖刪除它,一旦我的條件遇到與$('#ScrollDiv').off('scroll', appName.featureName.lazyLoader);

我做錯了什麼?

+1

你可能會更好地切換一個布爾值,該值指示是否應該運行該函數,而不是不斷地綁定和解除綁定事件處理程序。 「appName.featureName.getMorePhotos」函數的代碼是什麼樣的? – 2014-11-06 14:03:28

+0

我認爲你是正確的布爾比綁定和解除綁定...即使在下面的答案我無法得到的東西工作,當我通過布爾一切正常! – 2014-11-06 14:16:15

回答

1

你有沒有試過這樣的?

$('#ScrollDiv').on('scroll','#ScrollDiv', appName.featureName.lazyLoader); 

$('#ScrollDiv').off('scroll','#ScrollDiv', appName.featureName.lazyLoader); 

,或者您可以使用該方法綁定太

$('#ScrollDiv').bind('scroll', appName.featureName.lazyLoader); 

$('#ScrollDiv').unbind('scroll', appName.featureName.lazyLoader); 
+0

爲什麼你有一個委託事件處理程序,搜索*本身*?這將失敗,因爲'#ScrollDiv'不包含*#ScrollDiv。 – 2014-11-06 14:08:08

+0

.bind方法相當陳舊,而且.on應該從api 1.7版開始就是首選:http://api.jquery.com/bind/ – Markai 2014-11-06 14:08:21

+0

強制執行它?但1.7版本對我來說已經過時了。 ;) – vcrzy 2014-11-06 14:12:12

1

jQuery的.off()函數不工作的方式。如果你想添加和刪除只有你自己的滾動處理程序,並獨自離開其他第三方滾動處理程序,要使用

$("#scrollDiv").on("scroll.appName", appName.featureName.lazyLoader); 

,並刪除所有自己的處理程序:

$("#scrollDiv").off(".appName"); 

,或者到只刪除你自己的滾動處理,而是獨自離開click處理:

$("#scrollDiv").off("scroll.appName"); 

有關更多信息,請參閱http://api.jquery.com/off/的文檔。