基於jquery分頁插件


  今天終於完成了基於jquery的分頁插件的代碼編寫,也通過了功能測試,實現了分頁功能;由於剛開始寫jquery的插件,所以梳理邏輯的時間也很長,整個過程整整一周時間,今天終於搞完了,先將整個分頁插件的邏輯分享給大家,並將源碼上傳到自己的github倉庫,有需要的請點擊這里下載;給大家先看一下效果圖;

  整個分頁邏輯如下:

  首先判斷分頁類型,有兩種情況,第一:pageCount > showNum;第二:pageCount <= showNum;
  在第一種情況下還會出現如下三種情況;
  1、pageNo <= showNum + 2;
  2、showNum + 2 < pageNo <= pageCount - showNum + 3;
  3、pageCount - showNum + 3 < pageNo <= pageCount;
  在1的情況下又分為兩種情況:
  (1)、pageNo <= showNum;
  (2)、showNum < pageNo <= showNum + 2;
  在(2)中情況下面要考慮pageNo是否為最后一頁或倒數第二頁,如果是則隱藏...

提示:

  pageNo當前頁碼

  pageCount總頁碼數

  pageSize每頁顯示條數

  showNum顯示幾條頁碼在頁面上

  不多說了,給大家附上js源碼,如果在閱讀的過程中發現問題,歡迎大家在評論區與我探討;

  
  1 (function($){
  2     $.fn.paging = function (option) { //通過$.fn定義分頁函數paging,在需要分頁的地方直接調用
  3         var defaultOptions = {//默認項設置
  4             pageNo:1,//默認當前頁
  5             pageSize:10,//默認每頁顯示條數
  6             count:0,//默認數據總條數
  7             showNum:6,//默認顯示頁碼數
  8             jumpTo:true,//默認顯示跳轉指定頁模塊
  9             jumpBtnName:'確定',//默認跳轉按鈕的名稱
 10             fontSize:16,//跳轉按鈕字體大小
 11         };
 12 
 13         var self = this;
 14         var pagingCount = 0;//共計頁碼
 15         var Settings = $.extend( {}, defaultOptions, option );/*將defaultOptions對象和option
 16             隨想相應的屬性合並,並將新的對象賦值給Setting對象本身*/
 17         $(this).empty();//清空當前DOM節點下面的所有子節點 # $('a').empty() 清空a下面所有的子節點
 18 
 19         var checkDigit = function () {/*校驗數據條數count,每頁顯示條數pageSize,當前頁pageNo,
 20             顯示頁碼數showNum是否非法輸入*/
 21             if( Settings.pagNo < 0 || Settings.pageSize < 0 || Settings.count < 0){
 22                 console.error( "請檢查 pagNo,pageSize,count這個三個參數是否存在非法輸入" );
 23                 return false;
 24             }
 25             //如果showNum為非法數值,那么設置為默認值
 26             if( Settings.showNum < 0 ){
 27                 Setting.showNum = 6;
 28                 return true;
 29             }
 30         }
 31 
 32         var JsonPageConstruct = function (pageNo,pageCount,pageSize,showNum) {
 33         //構建分頁頁碼的變現形式,返回json字符串
 34         //pageNo當前頁碼
 35         //pageCount總頁碼數
 36         //pageSize每頁顯示條數
 37         //showNum顯示幾條頁碼在頁面上
 38             var data = '';
 39             if(pageNo == 1){
 40                 data = '{"jsonData":[{"text":"上一頁","num":0,"state":"disabled"},';
 41             }
 42             else{
 43                 data = '{"jsonData":[{"text":"上一頁","num":"'+ ( pageNo - 1 ) +'",'+
 44                 '"state":"abled"},';
 45             }
 46             /*
 47                 判斷分頁類型,有兩種情況,第一:pageCount > showNum;第二:pageCount <= 
 48                 showNum 49                 在第一種情況下還會出現如下三種情況;
 50                 1、pageNo <= showNum + 2;
 51                 2、showNum + 2 < pageNo <= pageCount - showNum + 3;
 52                 3、pageCount - showNum + 3 < pageNo <= pageCount;
 53                 在1的情況下又分為兩種情況:
 54                 (1)、pageNo <= showNum;
 55                 (2)、showNum < pageNo <= showNum + 2;
 56                 在(2)中情況下面要考慮pageNo是否為最后一頁或倒數第二頁,如果是則隱藏...
 57             */
 58             if( pageCount > showNum ) {
 59                 if( pageNo <= showNum + 2 ) {
 60                     if( pageNo <= showNum ) {
 61                         for(var i= 1 ;i <= showNum ; i++ ){
 62                             if( pageNo == i ) {
 63                                 data += '{"text":"'+ i +'","num":"'+ i +'","state":"active"},';
 64                             }
 65                             else{
 66                                 data += '{"text":"'+ i +'","num":"'+ i +'","state":"abled"},';
 67                             }
 68                         }
 69                         if( pageNo == showNum ) {
 70                         //顯示頁面后面在刷新出一個,
 71                         //此時i = showNum + 1,這邊之所以能夠訪問到i,是因為js在聲明變量
 72                         //的時候提升申明了,提升到最前面聲明
 73                             data += '{"text":"'+ i +'","num":"'+ i +'","state":"abled"},';
 74                         }
 75                     }
 76                     else{
 77                         for (var j = 1; j <= pageNo; j++) {
 78                             if( pageNo == j ) {
 79                                 data += '{"text":"'+ j +'","num":"'+ j +'","state":"active"},';
 80                             }
 81                             else{
 82                                 data += '{"text":"'+ j +'","num":"'+ j +'","state":"abled"},';
 83                             }
 84                         }
 85                         if(pageNo != pageCount){
 86                             data += '{"text":"'+ j +'","num":"'+ j +'","state":"abled"},';
 87                         }
 88                     }
 89                     //如果總頁數pageCount <= showNum + 2,則隱藏...
 90                     if(pageNo != pageCount){
 91                         if(pageNo != (pageCount - 1)){
 92                             data+='{"text":"...","num":"more","state":"disabled"},';
 93                         }
 94                     }
 95                 }
 96                 else if(pageNo <= pageCount - showNum + 3){
 97                     data += '{"text":"1","num":"1","state":"abled"},';
 98                     data += '{"text":"2","num":"2","state":"abled"},';
 99                     data += '{"text":"...","num":"more","state":"disabled"},';
100                     for (var m = pageNo - 2; m <= pageNo + 2; m++) {
101                         if(pageNo == m){
102                             data += '{"text":"'+ m +'","num":"'+ m +'","state":"active"},';
103                         }
104                         else{
105                             data += '{"text":"'+ m +'","num":"'+ m +'","state":"abled"},';
106                         }
107                     }
108                     data += '{"text":"...","num":"more","state":"disabled"},';
109                 }
110                 else{
111                     data += '{"text":"1","num":"1","state":"abled"},';
112                     data += '{"text":"2","num":"2","state":"abled"},';
113                     data += '{"text":"...","num":"more","state":"disabled"},';
114                     for (var n = pageCount - showNum + 1; n <= pageCount; n++) {
115                         if(pageNo == n){
116                             data += '{"text":"'+ n +'","num":"'+ n +'","state":"active"},';
117                         }
118                         else{
119                             data += '{"text":"'+ n +'","num":"'+ n +'","state":"abled"},';
120                         }
121                     }
122                 }
123             }
124             if(pageNo == pageCount){
125                 data += '{"text":"下一頁","num":"'+ (pageNo + 1) +'","state":"disabled"}]}';
126             }else{
127                 data += '{"text":"下一頁","num":"'+ (pageNo + 1) +'","state":"abled"}]}';
128             }
129             var json_return = JSON.parse(data);
130             return json_return;
131         }
132 
133         /*
134             將分頁結果顯示到頁面的相應的位置
135         */
136         function PagingJson(json){
137             
138             if(parseInt(Settings.count)>0){
139                 var html = '<ul class="pagination" style="display:flex;list-style:none;">';
140                 for(var a in json.jsonData){
141                     if(json.jsonData[a].state == "disabled"){
142                         html +='<li id="pageNum'+ json.jsonData[a].num +'" class="disabled" num="'+ json.jsonData[a].num +'" ><a href="javascript:;">'+ json.jsonData[a].text +'</a></li>';
143                     }
144                     else if(json.jsonData[a].state == "active"){
145                         html +='<li id="pageNum'+ json.jsonData[a].num +'" class="active" num="'+ json.jsonData[a].num +'" ><a href="javascript:;">'+ json.jsonData[a].text +'</a></li>';
146                         
147                     }else{
148                         html +='<li id="pageNum'+ json.jsonData[a].num +'" num="'+ json.jsonData[a].num +'" ><a href="javascript:;">'+ json.jsonData[a].text +'</a></li>';
149                     }
150                 }
151                 $(self).html(html);
152                 if(Settings.jumpTo == true){
153                     $(self).find(".pagination").append('<span class="text-muted" style="margin:5px;margin-left:10px;display:inline-block;font-size:18px;font-size:'+ Settings.fontSize +'px">共有'+ pagingCount +'頁/'+ Settings.count +'個</span><div style="display:inline-block" name="changePage"><span class="text-muted" style="margin:5px;margin-left:0px;display:inline-block;font-size:'+ Settings.fontSize +'px">,到第</span> <input type="number" min="1" max="'+ pagingCount +'"class="pagination_change_page" style="width:45px;border-color:#ddd"> <span class="text-muted" style="margin:5px;margin-left:10px;display:inline-block;font-size:font-size:'+ Settings.fontSize +'px"></span> <button class="btn btn-default btn-sm pagination_search">'+ Settings.jumpBtnName +'</button></div>');
154                 }
155             }else{
156 
157             }
158         }
159 
160 
161         
162 
163         var main = function () {//主函數
164             var check = checkDigit();
165             if( check == false ){
166                 return false;
167             }
168             var pageNo = parseInt( Settings.pageNo );
169             var pageSize = parseInt( Settings.pageSize );
170             var count = parseInt( Settings.count );
171             if( count % pageSize == 0){
172                 pagingCount = count / pageSize;
173             }
174             else{
175                 pagingCount = parseInt( count / pageSize ) + 1;
176             }
177             var showNum = parseInt( Settings.showNum );
178             var pageJson = JsonPageConstruct(pageNo,pagingCount,pageSize,showNum);
179             PagingJson(pageJson);
180             $(self).off();
181         };
182         main();
183 
184         
185     };
186 })(jQuery)
paging

注意:

  一定要引入jquery哦

 


免責聲明!

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



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