相信使用過scrollPagination的同學都會發現,這個插件在使用的時候會出現重複加載的問題,當然我也遇到這個問題,那問題出在哪兒呢??一開始就上網找答案啊,找出了原因,原來是因爲它發送request是基於mayLoadContent = $(target).scrollTop()+opts.heightOffset >= $(document).height() - $(target).height();,如果mayLoadContent 爲true,則請求,它並沒有對上一次的請求是否完成進行判斷,那這個就不好辦了呀,和我們想的不一樣。看網上有同學說加一個lock機制,然後我就自己試了一下,果斷的,立馬就有效果了,沒有出現重複加載。下面我把我修改的那段加鎖的代碼給大家貼出來,有需要的同學可以拿出去直接用,當然可能會出現問題。希望大家多多指正,本人只是個小菜鳥。 首先是對scrollpagination.js的修改,主要是添加了lock參數,根據情況給其賦值,並對它的值進行判斷。然後只要在頁面中的js調用的時候添加lock參數就可以了。
$.fn.scrollPagination.loadContent = function(obj, opts){
var target = opts.scrollTarget;
var mayLoadContent = $(target).scrollTop()+opts.heightOffset >= $(document).height() - $(target).height();
//根據mayLoadContent 和 lock兩個參數進行判斷
if (mayLoadContent && opts.lock){
if (opts.beforeLoad != null){
opts.beforeLoad();
}
//加載數據的時候把lock設爲false
opts.lock = false;
$(obj).children().attr('rel', 'loaded');
$.ajax({
type: 'POST',
url: opts.contentPage,
data: opts.contentData,
contentType: 'application/json',
success: function(data){
//加載成功後把lock設爲true,可以進行下一次request
opts.lock = true;
$(obj).append(data);
var objectsRendered = $(obj).children('[rel!=loaded]');
if (opts.afterLoad != null){
opts.afterLoad(objectsRendered);
}
//
},
dataType: 'html'
});
}
};
$.fn.scrollPagination.defaults = {
'contentPage' : null,
'contentData' : {},
'beforeLoad': null,
'afterLoad': null ,
'scrollTarget': null,
'heightOffset': 0,
//添加lock機制,如果數據加載完了,則lock爲true,可以加載下一組數據,如果數據沒有加載完,則lock爲false,等到數據加載完成了爲true。
'lock':true
};