scrollPagination重複加載問題的解決

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








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章