当前位置: 首页 > news >正文

JS实现简单的前端分页功能

功能:

  1. 每页显示固定数量的数据条数:用户可以根据下拉选择框动态改变每页显示的条数,例如5、10、20条。
  2. 上一页、下一页导航:用户可以通过点击“上一页”或“下一页”按钮在数据列表中前后翻页。
  3. 指定跳转页:用户可以输入一个页码,点击“跳转”按钮直接前往该页。
  4. 页码及数量显示:在页面上方显示当前是第几页、总共有多少页以及数据总数等信息。

  • 分页渲染函数 renderPage()
    renderPage() 函数根据 currentPagepageSizeitems 数组中截取当前页对应的数据片段,并在页面上显示。还会更新顶部的分页信息文本。

  • 分页按钮状态更新函数 updateButtonStates()
    根据 currentPagetotalPages 的对比,禁用或启用“上一页”、“下一页”按钮。例如,如果当前页为1,就应当禁用“上一页”按钮,如果当前页为最后一页,就应当禁用“下一页”按钮。

  • 事件绑定

    • 当用户在下拉框中选择不同的每页显示条数时,重新计算 totalPages,并将 currentPage 重置为1,然后重新渲染数据。
    • 当用户点击“上一页”、“下一页”时更改 currentPage,并调用 renderPage()updateButtonStates()
    • 当用户在输入框中输入页面号并点击“跳转”时,验证该页码是否在合法范围内。如果合法,则跳转到对应页码并重新渲染。

 

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>分页示例</title>
<style>body {font-family: Arial, sans-serif;margin: 20px;}.pagination-controls {margin-bottom: 10px;}.pagination-info {margin-bottom: 10px;}ul {list-style: none;padding:0;}li {margin:5px 0;}
</style>
</head>
<body><div class="pagination-controls"><label>每页显示条数:<select id="pageSizeSelect"><option value="5">5</option><option value="10" selected>10</option><option value="20">20</option></select></label>
</div><div class="pagination-info"><span id="pageInfo"></span>
</div><ul id="dataList"></ul><div class="pagination-actions"><button id="prevBtn">上一页</button><button id="nextBtn">下一页</button><input type="number" id="gotoPageInput" placeholder="页码" style="width:60px;"><button id="gotoPageBtn">跳转</button>
</div><script>// 模拟数据,假设有100条数据const items = [];for (let i = 1; i <= 100; i++) {items.push("第 " + i + " 条数据");}let currentPage = 1;           // 当前页码let pageSize = 10;             // 每页显示条数(默认10条)const totalItems = items.length; let totalPages = Math.ceil(totalItems / pageSize); // 总页数 = 总数据条数 / 每页条数const pageInfo = document.getElementById('pageInfo');const dataList = document.getElementById('dataList');const prevBtn = document.getElementById('prevBtn');const nextBtn = document.getElementById('nextBtn');const gotoPageInput = document.getElementById('gotoPageInput');const gotoPageBtn = document.getElementById('gotoPageBtn');const pageSizeSelect = document.getElementById('pageSizeSelect');// 渲染当前页的数据列表function renderPage() {// 计算当前页数据在总数据中的起始与结束索引const start = (currentPage - 1) * pageSize;const end = start + pageSize;const currentData = items.slice(start, end);// 清空现有列表dataList.innerHTML = '';// 将当前页数据依次加入列表currentData.forEach(item => {const li = document.createElement('li');li.textContent = item;dataList.appendChild(li);});// 更新分页信息pageInfo.textContent = `当前第 ${currentPage} 页 / 共 ${totalPages} 页,总计 ${totalItems} 条数据`;}// 更新分页按钮的状态(例如在第一页禁用“上一页”,在最后一页禁用“下一页”)function updateButtonStates() {prevBtn.disabled = (currentPage <= 1);nextBtn.disabled = (currentPage >= totalPages);}// 当用户选择不同的每页条数时重新计算分页信息pageSizeSelect.addEventListener('change', () => {pageSize = parseInt(pageSizeSelect.value, 10);totalPages = Math.ceil(totalItems / pageSize);currentPage = 1; // 切换后从第一页显示renderPage();updateButtonStates();});// 上一页按钮事件prevBtn.addEventListener('click', () => {if (currentPage > 1) {currentPage--;renderPage();updateButtonStates();}});// 下一页按钮事件nextBtn.addEventListener('click', () => {if (currentPage < totalPages) {currentPage++;renderPage();updateButtonStates();}});// 跳转到指定页按钮事件gotoPageBtn.addEventListener('click', () => {const page = parseInt(gotoPageInput.value, 10);if (!isNaN(page) && page >= 1 && page <= totalPages) {currentPage = page;renderPage();updateButtonStates();} else {alert("请输入有效的页码(1~" + totalPages + ")");}});// 初始化渲染renderPage();updateButtonStates();
</script></body>
</html>

 


http://www.mrgr.cn/news/80646.html

相关文章:

  • JS使用random随机数实现简单的四则算数验证
  • 采用qL-MPC技术进行小型固定翼无人机的路径跟随控制
  • YOLOv8目标检测(四)_图片推理
  • Web网络通信 --- 后端消息推送
  • tauri桌面应用开发入门
  • 脚本搭建论坛
  • Avalonia 开发环境准备
  • asp.net core发布配置端口号,支持linux
  • 使用qemu搭建armv7嵌入式开发环境
  • matlab绘图时设置左、右坐标轴为不同颜色
  • JVM性能优化一:初识内存泄露-内存溢出-垃圾回收
  • Linux Shell 脚本编程基础知识篇
  • 【蓝桥杯】46195.水仙花数
  • ARM学习(38)多进程多线程之间的通信方式
  • Visual Studio 2022 QT5.14.2 新建项目无法打开QT的ui文件,出现闪退情况
  • [spring]XML标签<bean>的二级标签
  • WPF ControlTemplate 控件模板
  • 【递归,搜索与回溯算法】穷举 vs 暴搜 vs 深搜 vs 回溯 vs 剪枝算法入门专题详解
  • “年轻科技旗舰”爱玛A7 Plus正式发布,全国售价4999元
  • AMS1117芯片驱动电路·降压芯片的驱动电路详解
  • linux - 软硬链接
  • Linux -- 线程控制相关的函数
  • C语言栈和队列
  • 麒麟操作系统服务架构保姆级教程(二)sersync、lsync备份和NFS持久化存储
  • 多模态抽取图片信息的 Prompt
  • 挑战一个月基本掌握C++(第五天)了解运算符,循环,判断