js实现加载更多、下拉刷新更多分页请求功能方法1.0

 综合实例:

 1 ;(function (w, $) {
 2 
 3     var loadmore = {
 4         /*单页加载更多 通用方法
 5          *
 6          * @param callback 回调方法
 7          * @param config 自定义参数
 8          * @param success 自定义ajax成功时处理函数
 9          * */
10         get: function (callback, config, success) {
11             var config = config ? config : {};
12             /*防止未传参数报错*/
13 
14             var counter = 0;
15             /*计数器*/
16             var pageStart = 0;
17             /*每页个数,默认10*/
18             var pageSize = config.size ? config.size : 10;
19             /*滚动至距底端指定距离内加载,默认100px*/
20             var limitH = config.limitH ? config.limitH : 100;
21             var btnID = config.btnID ? config.btnID : 'btn-load-more';
22             var divID = config.divID ? config.divID : 'div-load-more';
23 
24             /*通过点击加载更多*/
25             if (config.scroll) {
26                 $(document).on('click', '#' + btnID, function () {
27                     counter++;
28                     pageStart = counter * pageSize;
29                     callback && callback(config, pageStart, pageSize, counter, success);
30                 });
31             }
32 
33             /*通过自动监听滚动事件加载更多,可选支持*/
34             config.isEnd = false;
35             /*结束标志*/
36             config.isAjax = false;
37             /*防止滚动过快,服务端没来得及响应造成多次请求*/
38             $(window).scroll(function () {
39                 /*是否开启滚动加载*/
40                 if (!config.scroll) {
41                     return;
42                 }
43 
44                 /*滚动加载时如果已经没有更多的数据了、正在发生请求时,不能继续进行*/
45                 if (config.isEnd == true || config.isAjax == true) {
46                     return;
47                 }
48 
49                 /*当滚动到最底部以上指定像素时, 加载新内容*/
50                 if ($(document).height() - $(this).scrollTop() - $(this).height() < limitH) {
51                     counter++;
52                     pageStart = counter * pageSize;
53                     callback && callback(config, pageStart, pageSize, counter, success);
54                 }
55             });
56 
57             /*第一次自动加载*/
58             callback && callback(config, pageStart, pageSize, counter, success);
59         }
60     };
61     $.loadmore = loadmore;
62 })(window, window.jQuery);
63 
64 function getData(config, offset, size, counter, success) {
65     config.isAjax = true;
66     common.phonePaging(config.url, config.size, counter, config.desc, config.code, function (reponse) {
67         var sum = reponse.total;
68 
69         /************业务逻辑块:实现拼接html内容并append到页面*****************/
70         if (sum - offset < size) {
71             size = sum - offset;
72         }
73         success && success(reponse.rows);
74         /*******************************************/
75 
76         /*隐藏more*/
77         if ((offset + size) >= sum) {
78             config.isEnd = true;
79             /*停止滚动加载请求*/
80             //提示没有了
81             $('#' + config.btnID).text('已经到底了');
82         } else {
83             $('#' + config.btnID).show();
84         }
85 
86         config.isAjax = false;
87     });
88 
89 }

 

调用:
 1 $.loadmore.get(getData, {
 2             click: false, //默认是true,是否支持点击加载更多
 3             scroll: true, //默认是false,是否支持滚动加载
 4             size: 8, //每页显示个数,默认是10
 5             url: '??', //数据url,不能为空
 6             code: {'??':'??'}, //url参数
 7             desc: 'time', //结果集排序字段,不能为空
 8             divID: 'panel-div',//内容承载div id,默认为div-load-more
 9 //            btnID: '',//加载更多按钮id,默认为btn-load-more
10             limitH: 25//加载条件,滚动条距离页面底端距离,默认为100
11         }, SucceedFun);
12 
13         function SucceedFun(data) {
14             if (!isNull(data)) {
15                 var contents = {
16                     "data": data,
17                     statusRander: function () {
18                         if (this.accept_status == '0') {
19                             return '<a  class=\'btn-danger btn-sm pull-right\' >未受理</a>';
20                         } else {
21                             return '<a class=\'btn btn-success btn-sm pull-right\' data-toggle="modal" data-target="#myModal2" onclick=\'ssaRdingdanQuery(' + this.num + ');\'>详  细</a>';
22                         }
23                     }
24                 };
25                 $wrap.append(Mustache.to_html(tpl, contents));
26             }
27         }

其中Mustache.to_html()引用自mustache.js,该js的功能为直接解析json数据至指定格式的html模板中。

lodemore.get()方法的succeedFun入口参数为ajax请求成功后的自定义数据处理函数,可以适用于不同的页面,灵活自定义分页数据处理。

本实例工程中后台采用Java语言,common.phonePaging()是自定义好的手机端分页请求数据函数,可根据项目替换。


posted on 2017-04-18 14:20  意孤行  阅读(10458)  评论(0编辑  收藏  举报

导航