纯JavaScript实现通用分页功能

凌晨两点半
凌晨两点半
发布时间:2026-10-13 | 6人浏览过
原创

本文详细介绍如何利用纯JavaScript(Vanilla JS)编写一个轻量级的前端分页组件。该方案通过数学计算得出当前页码的显示范围,并生成包含“...”省略号、首页、尾页及具体页码的HTML结构。这种方式不需要引入jQuery或其他UI框架,适合对页面体积敏感的项目。

核心逻辑与目标

要实现一个通用的分页效果,需要解决三个关键问题: 1. 范围计算:根据当前页码和最大显示数量,计算出左右两侧的页码偏移量。
2. 边界处理:确保页码不会小于1,也不会超过总页数。
3. DOM渲染:将计算好的页码数组转换为点击可交互的HTML字符串。

配置参数说明

使用前需定义以下基础变量(通常由后端数据返回):

  • Num: 数据总条数(必填)
  • index: 当前所在页码(必填,从1开始)
  • pageNum: 每页显示的条数(可选,默认10)
  • maxPageNum: 分页栏中最多显示的页码按钮数(可选,默认5,必须大于等于1)

第1步:计算总页数与显示区间

首先计算总页数,并确定分页栏需要展示的起始页码(first)和结束页码(last)。这里使用简单的算法来保持页码中心相对于当前页居中。

// 计算总页数
var total = (Num % pageNum > 0) ? (Math.floor(Num / pageNum) + 1) : (Num / pageNum);

// 设置显示范围的基础变量
var first = 1;
var last = 1;
var decrease = Math.floor(maxPageNum / 2); // 当前页向前偏移量
var increase = Math.floor(maxPageNum / 2); // 当前页向后偏移量

if (maxPageNum >= 1) {
    if (maxPageNum == 1) {
        // 如果最多只显示1个页码按钮,则显示当前页
        first = index <= total ? index : total;
        last = index <= total ? index : total;
    } else {
        // 计算初始的 first 值
        first = index - decrease;
        while (first <= 0) {
            first++;
        }

        // 修正 first:如果剩余页数不足,调整 first 使 last 达到最大可能的总数
        if ((total - index) <= decrease) {
            var diff = total - first;
            while (diff < maxPageNum - 1) {
                if (first == 1) break;
                --first;
                diff = total - first;
            }
        }

        // 计算初始的 last 值
        last = index + increase;
        while (last >= 1) {
            if (last <= total) break;
            last--;
        }
        
        // 确保 last 不超过允许的最大显示数量限制或总页数
        last = last >= maxPageNum ? last : (maxPageNum > total ? total : maxPageNum);
    }
} else {
    alert("至少需要显示一个页码!");
}

第2步:构建分页DOM字符串

获取 first 和 last 后,遍历该区间生成页码链接。同时添加“...”表示省略,以及“首页”和“尾页”快捷方式。

var prev = index - 1; // 上一页索引
var next = index + 1; // 下一页索引
var str = "<tr><td>";

if (total == 0) {
    str += "共 <a href='#'>0</a> 页";
} else if (index > total || index <= 0) {
    str += "<span style='color:red;'>页码超出范围</span>";
} else if (total > 0) {
    // 添加左侧省略号
    if (first > 1) {
        str += "...";
    }

    // 循环生成分页按钮
    for (var i = first; i <= last; i++) {
        if (i == index) {
            // 当前页高亮(示例中使用简单文本标记,实际可加CSS类)
            str += "[" + i + "] ";
        } else {
            str += "<a href='#' onclick='submit(" + i + ")'>" + i + "</a> ";
        }
    }

    // 添加右侧省略号
    if (last < total) {
        str += "...";
    }

    // 添加首尾快捷链接
    str += "<br>";
    if (index != 1 && total > 1) {
        str += "<a href='#' onclick='submit(1)'>首页</a> ";
    }
    if (index != total && total > 1) {
        str += "<a href='#' onclick='submit(" + total + ")'>尾页</a>";
    }
}
str += "</td></tr>";

第3步:插入页面与处理跳转

将生成的 HTML 字符串插入到指定的容器元素中,并绑定数据请求函数。

// 假设分页区域有一个 id 为 page-container 的元素
document.getElementById('page-container').innerHTML = str;

// 页码点击触发事件
function submit(pageIndex) {
    // 更新地址栏或发起 AJAX 请求加载新数据
    console.log("跳转到第 " + pageIndex + " 页");
    window.location.href = "?page=" + pageIndex;
}

总结

以上代码实现了一个基础的客户端分页逻辑。它完全剥离了jQuery依赖,仅使用原生JS操作DOM,代码结构简单,便于理解和学习。在实际项目中,建议配合 CSS 样式美化“...”、当前页高亮以及链接外观,以提升用户体验。以上就是纯JavaScript实现分页功能的详细内容,更多关于JavaScript前端开发的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表