相信使用过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
};