zoukankan      html  css  js  c++  java
  • 简单理解分页原理

    一般的分页是由后端实现,前端不进行分页,只是负责发送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请求获取数据(按需加载)。

  • 相关阅读:
    C语言的swap函数的易错点
    C语言结构体指针,及其错误示范
    操作系统--问答题
    数据库-存储过程、触发器、视图-考研笔记
    数据库知识-恢复子系统、数据库恢复的基本技术、转储方法、日志文件、undo/redo操作、数据库镜像
    c语言,快排序找出第k小/大的数
    STM32的Flash读写保护,SWD引脚锁的各种解决办法汇总(2020-03-10)
    uCOS全家桶PDF文档整理汇总贴,提供论坛,百度云和腾讯云下载(2020-03-09)
    分享下之前做的STM32嵌入式Web完整设计教程和案例html,Ajax,Javacript,XML,cgi等
    【STM32H7教程】第71章 STM32H7的内部Flash应用之模拟EEPROM
  • 原文地址:https://www.cnblogs.com/Sroot/p/5817583.html
Copyright © 2011-2022 走看看