簡單理解分頁原理


一般的分頁是由后端實現,前端不進行分頁,只是負責發送ajax請求獲取數據顯示。后來發現前端也可以實現分頁,網上有很多jquery的分頁插件,但具體怎么實現的卻不知道,於是就研究了一下前端分頁具體實現。

 

實現分頁功能需要了解幾個參數

1.totalPage 總頁數

2.totalNumber 一共有多少條數據

3.pageSize 每頁顯示多少條數據

4.currentPage 當前第幾頁

 

拓展參數

1.rangeStart 起始頁

2.rangeEnd 末頁

 

具體實現代碼如下:

 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>js分頁</title>
<style type="text/css">
body { margin: 0; padding: 0; }
.pagination { color: #333; text-align: center; margin: 8px; }
.pagination span { color: #999; margin: 0 1px; padding: 3px 6px; border: 1px solid #ccc; }
.pagination span.on { background-color: #337ab7; color: #fff; font-weight: bold; border: 1px solid #333; }
.pagination a { color: #00f; text-decoration: none; }
.pagination a span { border: 1px solid #66c; color: #33f; }
#pager { margin: 20px; padding: 4px; }
#content { text-align: center; }
</style>
</head>

<body>
<div id="pager"></div>
<div id="content"></div>
<script>
            var currentPage = 1; // 當前頁碼, 從1開始
            var pageSize = 5; // 每頁顯示記錄數
            var maxButtons = 10; // 顯示的分頁按鈕數量
            var totalNumber = 30; // 記錄總數
            var totalPage = parseInt(Math.ceil(totalNumber / pageSize)); // 總頁數
            initPage();

            function initPage() {
                //循環生成數組
                var arr = [];
                for (var o = 0; o < totalNumber; o++) {
                    arr.push(o);
                }
                //每一頁第一個li
                var rangeStartitem = (currentPage - 1) * pageSize;
                //開始頁
                var rangeStart = Math.max(1, currentPage - parseInt(maxButtons / 2));
                //最后一頁
                var rangeEnd = Math.min(totalPage, rangeStart + maxButtons - 1);
                
                var constr = pageCon(arr, rangeStartitem, pageSize);
                
                var divcontent = document.getElementById("content");
                divcontent.innerHTML = constr;
                
                //創建分頁模板
                var str = "";
                str += "<div class='pagination'>";
                str += "當前第" + currentPage + ""
                //如果總頁數大於1
                if (totalPage > 1) {
                    //當前頁不是第一頁
                    if (currentPage != 1) {
                        str += '<a href="#!"  data-num="1"><span>|&lt;</span></a>';
                        str += '<a href="#!"  data-num="' + (currentPage - 1) + '"><span>&lt;&lt;</span></a>';
                    } else {
                        //如果是第一頁,禁用上一頁按鈕
                        str += '<span>|&lt;</span>';
                        str += '<span>&lt;&lt;</span>';
                    }
                    //中間頁碼
                    for (var i = rangeStart; i <= rangeEnd; i++) {
                        //如果是當前頁的話,就禁用當前頁的按鈕
                    if (i == currentPage) {
                        str += '<span class="on">' + i + "</span>";
                    } else {
                        //否則就可以點擊該頁
                        str += '<a href="#"  data-num="' + i + '"><span>' + i + "</span></a>";
                    }
                    }
                    //當前頁不是總頁,即是最后一頁
                    if (currentPage != totalPage) {
                        str += '<a href="#"  data-num="' + (currentPage + 1) + '"><span>&gt;&gt;</span></a>';
                        str += '<a href="#"  data-num="' + totalPage + '"><span>&gt;|</span></a>';
                    } else {
                        //如果是最后頁,禁用下一頁
                        str += '<span>&gt;&gt;</span>';
                        str += '<span>&gt;|</span>';
                    }
                }
                                                    
                str += ' 一共' + totalPage + '頁, ' + totalNumber + '條記錄 </div>';
                
                var divpager = document.getElementById("pager");
                divpager.innerHTML = str;
                //獲取所有生成的頁面鏈接
                var listTag = divpager.getElementsByTagName('a');
                //綁定li事件
                for (var i = 0; i < listTag.length; i++) {
                    listTag[i].onclick = function() {
                        var currentPage = this.getAttribute('data-num');
                        nowcurrentPage(currentPage);
                        return false;
                    };
                }
            }
            //傳遞頁面
            function nowcurrentPage(currentPage) {
                this.currentPage = currentPage;
                initPage();
            }
            
            //生成每頁的數據
            function pageCon(arr, rangeStartitem, len) {
                var constr = '';
                for (var i = rangeStartitem; i < rangeStartitem + len; i++) {
                    constr += "<li>"+ arr[i] + "</li>";
                }
                return constr;
            }
        </script>
</body>
</html>

 

PS:此代碼僅用於研究分頁功能具體怎么實現。具體請參考Pagination.js插件。

 

總結:實際的項目中,還是后端進行分頁為好,不要使用前端分頁,因為前端分頁基本是一次性把所有數據獲取下來,然后前端才開始進行分頁,導致頁面性能下降(客戶端需要花時間處理),所以建議還是用后端處理分頁,前端發送ajax請求獲取數據(按需加載)。

 


免責聲明!

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



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