纯JavaScript实现通用分页功能
本文详细介绍如何利用纯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前端开发的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









