Bootstrap4分页实现

在网上找了一大圈分页实现,没有一个现成好用的,一怒之下,自己造。

参考了 LayUI 的分页风格,将 Bootstrap4 的分页完整地实现了出来。

以下代码可直接进行测试。

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 
  4 <head>
  5     <meta charset="UTF-8">
  6     <title>Bootstrap4</title>
  7     <link rel="stylesheet" href="lib/bootstrap-4.3.1-dist/css/bootstrap.css">
  8     <script src="lib/jquery-3.4.1.js"></script>
  9     <script src="lib/bootstrap-4.3.1-dist/js/bootstrap.js"></script>
 10 </head>
 11 
 12 <body>
 13     <div style="width: fit-content; margin: 0 auto;">
 14         <nav>
 15             <ul id="pagination" class="pagination">
 16                 <li class="page-item disabled"><a class="page-link" href="#">上一页</a></li>
 17                 <li class="page-item disabled"><a class="page-link" href="#">1</a></li>
 18                 <li class="page-item disabled"><a class="page-link" href="#">下一页</a></li>
 19             </ul>
 20         </nav>
 21     </div>
 22 </body>
 23 
 24 <script>
 25 list(); // 此句用于测试
 26 
 27 var currPage = 1,   // 当前页
 28     pageSize = 10;  // 页大小
 29 
 30 function list(page) {
 31     if (page === 'pre') {
 32         currPage--;
 33     } else if (page === 'next') {
 34         currPage++;
 35     } else {
 36         currPage = page || 1;
 37     }
 38     // 关键在此:Ajax 从后端获取总页数作为 buildPagination 函数的参数传入
 39     // let param = {currPage: currPage, pageSize: pageSize};
 40     // $.ajax({
 41     //     type: 'get',
 42     //     url: url,
 43     //     data: JSON.stringify(param),
 44     //     success: function(res) {
 45     //         buildPagination(res.totalPage);
 46             buildPagination(10);    // 此句用于测试
 47     //     }
 48     // });
 49 }
 50 
 51 function buildPagination(totalPage) {
 52     let pageStr = '';
 53     if (totalPage > 1) {
 54         if (totalPage <= 5) {
 55             pageStr += prePage();
 56             pageStr += startNPage(totalPage);
 57             pageStr += nextPage(totalPage);
 58         } else if (totalPage > 5) {
 59             if (currPage < 5) {
 60                 pageStr += prePage();
 61                 pageStr += startNPage(totalPage);
 62                 pageStr += lastPage(totalPage);
 63                 pageStr += nextPage(totalPage);
 64             } else {
 65                 if (currPage <= (totalPage - 5)) {
 66                     pageStr += prePage();
 67                     pageStr += firstPage();
 68                     pageStr += plusAndMinusTwoPages();
 69                     pageStr += lastPage(totalPage);
 70                     pageStr += nextPage(totalPage);
 71                 } else {
 72                     pageStr += prePage();
 73                     pageStr += firstPage();
 74                     pageStr += endNPage(totalPage);
 75                     pageStr += nextPage(totalPage);
 76                 }
 77             }
 78         }
 79     } else {
 80         pageStr += initPage();
 81     }
 82     $("#pagination").html(pageStr);
 83 }
 84 // 初始状态
 85 function initPage() {
 86     return '<li class="page-item disabled"><a class="page-link" href="javascript: void(0);">上一页</a></li>' +
 87         '<li class="page-item disabled"><a class="page-link" href="javascript: void(0);">1</a></li>' +
 88         '<li class="page-item disabled"><a class="page-link" href="javascript: void(0);">下一页</a></li>';
 89 }
 90 // 上一页
 91 function prePage() {
 92     let str = '';
 93     if (currPage === 1) {
 94         str += '<li class="page-item disabled"><a class="page-link" href="javascript: void(0);">上一页</a></li>';
 95     } else {
 96         str += '<li class="page-item"><a class="page-link" href="javascript: list(\'pre\');">上一页</a></li>';
 97     }
 98     return str;
 99 }
100 // 固定首页
101 function firstPage() {
102     return '<li class="page-item"><a class="page-link" href="javascript: list(1);">1</a></li>' +
103         '<li class="page-item disabled"><a class="page-link" href="javascript: void(0);">...</a></li>';
104 }
105 // 开头的连续 n 页【注意判断总页数是否大于5】
106 function startNPage(totalPage) {
107     let str = '', total;
108     if (totalPage > 5) {
109         total = 5;
110     } else {
111         total = totalPage;
112     }
113     for (let i = 1; i < total + 1; i++) {
114         if (i === currPage) {
115             str += '<li class="page-item disabled"><a class="page-link" href="javascript: void(0);">' + i + '</a></li>';
116         } else {
117             str += '<li class="page-item"><a class="page-link" href="javascript: list(' + i + ');">' + i + '</a></li>';
118         }
119     }
120     return str;
121 }
122 // 前后正负 2 页
123 function plusAndMinusTwoPages() {
124     let str = '', start = currPage - 2, end = currPage + 3;
125     for (let i = start; i < end; i++) {
126         if (i === currPage) {
127             str += '<li class="page-item disabled"><a class="page-link" href="javascript: void(0);">' + i + '</a></li>';
128         } else {
129             str += '<li class="page-item"><a class="page-link" href="javascript: list(' + i + ');">' + i + '</a></li>';
130         }
131     }
132     return str;
133 }
134 // 末尾的连续 n 页
135 function endNPage(totalPage) {
136     let str = '', start = totalPage - 5 + 1, end = totalPage + 1;
137     for (let i = start; i < end; i++) {
138         if (i === currPage) {
139             str += '<li class="page-item disabled"><a class="page-link" href="javascript: void(0);">' + i + '</a></li>';
140         } else {
141             str += '<li class="page-item"><a class="page-link" href="javascript: list(' + i + ');">' + i + '</a></li>';
142         }
143     }
144     return str;
145 }
146 // 固定末页
147 function lastPage(totalPage) {
148     return '<li class="page-item disabled"><a class="page-link" href="javascript: void(0);">...</a></li>' +
149         '<li class="page-item"><a class="page-link" href="javascript: list(' + totalPage + ');">' + totalPage + '</a></li>';
150 }
151 // 下一页
152 function nextPage(totalPage) {
153     let str = '';
154     if (currPage === totalPage) {
155         str += '<li class="page-item disabled"><a class="page-link" href="javascript: void(0);">下一页</a></li>';
156     } else {
157         str += '<li class="page-item"><a class="page-link" href="javascript: list(\'next\');">下一页</a></li>';
158     }
159     return str;
160 }
161 </script>
162 
163 </html>
View Code

附:当总页数大于1时的分析


当 totalPage 小于等于 5 页时
      【上一页】【开头的连续 n 页(n<=5)】【下一页】
当 totalPage 大于 5 页时
      如果 currPage 小于 5
            【上一页】【开头的连续 n 页(n==5)】【……固定末页】【下一页】
      如果 currPage 大于等于 5
            currPage 小于等于(totalPage- 5)
                  【上一页】【固定首页……】【前后正负 2 页】【……固定末页】【下一页】
            currPage 大于(totalPage- 5)
                  【上一页】【固定首页……】【末尾的连续 n 页】【下一页】

猜你喜欢

转载自www.cnblogs.com/szx10000/p/12398816.html
今日推荐