做下笔记,:移动端实现上拉加载更多,其实是数据的分段加载,在这里为了做测试我写了几个json文件作为分段数据:
方式一:使用dropload.js;
配置好相关参数及回调函数就可使用:代码如下
var paging = 1;//页码数 //初始化展示第一页数据 $.ajax({ type: 'GET', url: "code"+paging+".json", dataType: 'json', success: function(data){ var result = ''; for(var i = 0; i < data.length; i++){ result += "<tr><td>"+data[i].qy+"</td><td>"+data[i].num+"</td><td>"+data[i].total+"</td></tr>"; } $('#code-table').append(result); } }); // dropload函数接口设置 $(".code-table").dropload({ scrollArea : window, domDown : { domClass : 'dropload-down', // 滑动到底部显示内容 domRefresh : '<div class="dropload-refresh">↑上拉加载更多</div>', // 内容加载过程中显示内容 domLoad : '<div class="dropload-load"><span class="loading"></span>加载中...</div>', // 没有更多内容-显示提示 domNoData : '<div class="dropload-noData">无更多数据</div>' }, loadDownFn : function(me){ paging++; // 每次请求,页码加1 $(".code-table").css("height","auto");//容器初始化时我设置了高度,当加载更多时应该去掉,让内容撑开 $.ajax({ type: 'GET', url: "code"+paging+".json", //分段模拟数据,json文件 dataType: 'json', success: function(data){ // data = JSON.parse(data); var result = ''; // 选择需要显示的数据 拼接 DOM for(var i = 0; i < data.length; i++){ result += "<tr><td>"+data[i].qy+"</td><td>"+data[i].num+"</td><td>"+data[i].total+"</td></tr>"; } if(data.length<9){ // 再往下已经没有数据 // 锁定 me.lock(); // 显示无数据 me.noData(); } // 为了测试,延迟1秒加载 setTimeout(function(){ // 加载 插入到原有 DOM 之后 $('#code-table').append(result); // 每次数据加载完,必须重置 me.resetload(); },1000); }, // 加载出错 error: function(xhr, type){ alert('Ajax error!'); // 即使加载出错,也得重置 me.resetload(); } }); }, threshold : 50 });
dropload下拉刷新等更多详情可参考:http://www.jianshu.com/p/65c718093d44;
方法二:利用移动端touch事件(貌似originalEvent事件需要jq2.0+版本)自定义方法(欢迎纠正);
方法代码:
1 var $Od=$(document);//触摸对象 2 var pIndex=1; //页码数 3 var pSize=6; //每页数据个数 4 var flag=1; //为了防止重复滑动导致数据错乱,我设置了一个标记,为1时上拉有效,为0无效 5 function sliderMore(){ 6 //触摸事件开始 7 $Od.on('touchstart.mo',function(ev){ 8 //获取手指触摸列表,[0]代表第一个像素点 9 var touch = ev.originalEvent.changedTouches[0]; 10 var disy1 = touch.pageY; //记录当前位置 11 //开始滑动 12 $Od.on('touchmove.mo',function(ev){ 13 14 }) 15 //抬起手指结束事件 16 $Od.on('touchend.mo',function(ev){ 17 if(flag){ 19 //再次获取手指触摸列表,[0]代表第一个像素点,并记录位置 20 var touch = ev.originalEvent.changedTouches[0]; 21 var disy2 = touch.pageY; 22 //判断条件为上拉 23 if((disy1-disy2)>20){ 24 flag=0;//开始上拉设置重复上拉无效 pIndex++;//每次请求页码+1
25 $('#tips').html("加载中..."); //样式,可自定义 26 //下面是本人写的ajax请求数据,可自定义 27 var startVal = $("#dstart").val(); 28 var endVal = $("#dend").val(); 29 var data = { 30 "method":"get_activated_code_info", 31 "start_time":startVal, 32 "end_time":endVal, 33 "page_index":pIndex, 34 "page_size":pSize 35 }; 36 data = JSON.stringify(data); 37 ajaxCall(data,function(result){ 38 //为了测试,延时展现数据效果 39 setTimeout(function(){ 40 //将请求结果展现出来 41 for(var i in result.items){ 42 addItem(result.items[i].company_name,result.items[i].code_activated,result.items[i].activated_amount); 43 } 44 $('#tips').html("上拉加载更多"); 45 //判断请求的结果有没有数据,没有就改变提示内容 46 if(result.items.length==0){ 47 console.log(245); 48 $('#tips').html("无更多数据"); 49 } 50 },500); 51 //要在数据展示出来之后,再将flag设为1,所以这里时间1000>500,这里可以只要一个定时器(就不改了),可以遍历数据不需放在定时器里,遍历用个变量保存,然后定时一次加入容器同时flag=1; 52 setTimeout(function(){ 53 flag=1; 54 },1000); 55 }); 56 } 57 } 58 }) 59 }) 60 } 61 sliderMore();