• 移动端实现上拉加载更多(使用dropload.js vs js)


    做下笔记,:移动端实现上拉加载更多,其实是数据的分段加载,在这里为了做测试我写了几个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();
  • 相关阅读:
    随便 构思 一个 计算 解析积分 的 简单 的 数学软件
    为什么要 拿 光 的 干涉条纹 宽度 变化 作为 判断 光速 变化 的 依据 ?
    相对论 的 几个问题
    设计 逻辑电路 的 开关元件 (2)
    设计 逻辑电路 的 开关元件
    用 逻辑电路 实现一个 开平方 算法
    小梦 在 民科吧 发了一个 用 四则运算 开平方 的 帖
    物理学 的 基本原理
    和 小梦 探讨 一个 经典力学 问题
    二分法 比 跨越步进法 快
  • 原文地址:https://www.cnblogs.com/sheqiuluo/p/7055478.html
Copyright © 2020-2023  润新知