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()是自定義好的手機端分頁請求數據函數,可根據項目替換。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM