关于如何实现『加载更多』功能,网上有插件可用,例如比较著名的使用iscroll.js实现的上拉加载更多、下拉刷新功能。
但实际用起来却是很麻烦。由于是第三方插件,要按照对方定义的方法使用,用起来总感觉很不顺心。再加上iscroll.js本身并没有集成加载更多的功能,需要进行自行扩展。想继续使用iscroll.js实现加载更多功能的,上面给的链接可以看看。
h5项目里需要实现简单的分页功能,由于是移动端,考虑用『加载更多』会更好,而不是PC端的翻页。
JS代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
;(function(w,$){
var loadmore = {
get : function(callback, config){ var config = config ? config : {}; var counter = 1; var pageStart = config.size ? config.size : 10; var pageSize = config.size ? config.size : 10;
config.isEnd = false; config.isAjax = false; $(config.ele).scroll(function(){ if(!config.scroll){ return; } if(config.isEnd == true || config.isAjax == true){ return; } if ($(this).find("ul").height() - $(this).scrollTop() - $(this).height()<100){ counter ++; pageStart = counter * pageSize; callback && callback.call( $(config.ele),config, pageStart, pageSize); } }); callback && callback.call( $(config.ele),config, pageStart, pageSize); }, } $.loadmore = loadmore; })(window, window.jQuery || window.Zepto);
|
如何调用:
1 2 3 4 5 6
| $.loadmore.get(getData, { ele:window, scroll: true, size:10, flag: 1, });
|
第一个参数是回调函数,即我们的业务逻辑。我把我的业务逻辑方法贴出来:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| function getData(config, offset,size){
config.isAjax = true;
$.ajax({ type: 'GET', url: 'json/blog.json', dataType: 'json', success: function(reponse){
config.isAjax = false;
var data = reponse.list; var sum = reponse.list.length;
var result = '';
if(sum - offset < size ){ size = sum - offset; }
for(var i=offset; i< (offset+size); i++){ result +='<div class="weui_media_box weui_media_text">'+ '<a href="'+ data[i].url +'" target="_blank"><h4 class="weui_media_title">'+ data[i].title +'</h4></a>'+ '<p class="weui_media_desc">'+ data[i].desc +'</p>'+ '</div>'; }
$('.js-blog-list').append(result);
if ( (offset + size) >= sum){ $(".js-load-more").hide(); config.isEnd = true; }else{ $(".js-load-more").show(); } }, error: function(xhr, type){ alert('Ajax error!'); } }); }
|
以上仅贴出核心代码,详细案列:@Munachar