JavaScript 自定义分页组件

仿boostrap 前端分页组件的实现

一  写一个前端自定义分页组件,需要考虑以下问题

   需要一个<ul id="pagination"></ul>标签

   total; // 总数据的数量

   pageSize; // 一页显示数量

   pageIndex; // 当前页 

二 实现细节

编写html文件   index.html 

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>javascript分页</title>
</head><body><div><ul id="pagination"></ul></div><script src="./index.js"></script><script>generatePagination(500, 10, 1,'/proudct');</script>
</body></html>

实现生成的js   index.js

function generatePagination(total, pageSize, pageIndex, navUrl) {/* 创建style标签并设置style样式 */let style = document.createElement('style');style.innerHTML ='#pagination{width:100%;margin:30px;margin-bottom:0px;position:fixed;left:0;display:flex;padding-left:0;}#pageTips{position:fixed;left:10px;top:100px;font-size:15px;}ul li{list-style:none;display:inline-block;user-select:none;}.list-items{width:36px;height:36px;line-height:36px;text-align:center;background-color:#fff;color:#000;cursor:pointer;transition:all .3s;border:1px solid #dedede;border-right:none;border-radius:0px;}.list-items:hover{background-color:#e9ecef;border-color:#dee2e6;}.active,.active:hover{color:#fff;background-color:#337ab7;border-color:#337ab7;}.lbl{border-radius:5px 0px 0px 5px;color:#337ab7;border:1px solid #dedede;}.lbr{border-radius:0px 5px 5px 0px;color:#337ab7;border:1px solid #dedede;border-left:none}';document.getElementsByTagName('head').item(0).appendChild(style);/* 需要一个<ul id="pagination"></ul>标签total; // 总数据的数量pageSize; // 一页显示数量pageIndex; // 当前页*/let totalPage = Math.ceil(total / pageSize); // 总页数function initPagination() {let pagination = document.querySelector('#pagination');let pageHtml; // 按钮内容let prevButton = `<li class='list-items lbl' id='btnPrev'>‹</li>`; // 向左let nextButton = `<li class='list-items lbr' id='btnNext'>›</li>`; // 向右let firstPage = `<li class='list-items' pagenumber=1>1</li>`; // 第一页let lastPage = `<li class='list-items' pagenumber=${totalPage}>${totalPage}</li>`; // 最后一页let leftOmitPage = `<li class='list-items' id='btnGoLeft'>...</li>`; // 省略号let rightOmitPage = `<li class='list-items' id='btnGoRight'>...</li>`; // 省略号let pageTips = `<div style='line-height:20px;margin-left:30px' id='pageTips'>${pageIndex} - ${totalPage} of ${total} items</div > `;pageHtml = prevButton; // 添加向左的按钮/* 生成页数 */if (totalPage <= 6) {// 总页数小于等于10页全部显示for (let i = 1; i <= totalPage; i++) {pageHtml += `<li class='list-items' pagenumber=${i}>${i}</li>`;}}//页码大于5页的情况  当前页大于5的话,并且页码是大于11页的else if (pageIndex <= 4) {//总页数大于10且当前页远离总页数for (let i = 1; i <= 5; i++) {pageHtml += `<li class='list-items' pagenumber=${i}>${i}</li>`;}pageHtml += rightOmitPage;pageHtml += lastPage;} else if (pageIndex > totalPage - 3) {//pageindex>=9 的时候并且页数》10页的时候console.log('totalPage - 2:' + (totalPage - 3));console.log('pageindex:' + pageIndex);//总页数大于10且当前页接近总页数pageHtml += firstPage;pageHtml += leftOmitPage;for (let i = totalPage - 4; i <= totalPage; i++) {pageHtml += `<li class='list-items' pagenumber=${i}>${i}</li>`;}} else {//除开上面两个情况 当前页在中间pageHtml += firstPage;pageHtml += leftOmitPage;for (let i = pageIndex - 1; i <= pageIndex + 1; i++) {pageHtml += `<li class='list-items' pagenumber=${i}>${i}</li>`;}pageHtml += rightOmitPage;pageHtml += lastPage;}pageHtml += nextButton; // 添加向右的按钮pageHtml += pageTips;pagination.innerHTML = pageHtml;document.querySelector("li[pagenumber='" + pageIndex + "']").classList.add('active');let pagenumberBtns = document.querySelectorAll('li[pagenumber]'); // 获取所有的页码按钮/* 点击页码按钮进行翻页 */pagenumberBtns.forEach(function (elements) {elements.onclick = function () {pageIndex = Number(this.innerHTML); // 当前页document.querySelector("li[pagenumber='" + pageIndex + "']").classList.add('active');pageHtml.innerHTML = '';initPagination();console.log(`go to href : ${navUrl}?pageNum=${pageIndex}`);};});/* 向左翻页 */document.getElementById('btnPrev').addEventListener('click', function () {if (pageIndex > 1) {pageIndex--;pageHtml.innerHTML = '';initPagination();}});/* 向右翻页 */document.getElementById('btnNext').addEventListener('click', function () {if (pageIndex < totalPage) {pageIndex++;pageHtml.innerHTML = '';initPagination();}});/* 向左快速翻页 */let btnGoLeft = document.getElementById('btnGoLeft');if (btnGoLeft) {btnGoLeft.addEventListener('mouseenter', function () {this.innerHTML = '<';});btnGoLeft.addEventListener('mouseleave', function () {this.innerHTML = '...';});btnGoLeft.addEventListener('click', function () {if (pageIndex > 10) {pageIndex -= 10;pageHtml.innerHTML = '';initPagination();console.log(`go to href : ${navUrl}?pageNum=${pageIndex}`);}});}/* 向右快速翻页 */let btnGoRight = document.getElementById('btnGoRight');if (btnGoRight) {btnGoRight.addEventListener('mouseenter', function () {this.innerHTML = '>';});btnGoRight.addEventListener('mouseleave', function () {this.innerHTML = '...';});btnGoRight.addEventListener('click', function () {if (pageIndex < totalPage - 10) {pageIndex += 10;pageHtml.innerHTML = '';initPagination();console.log(`go to href : ${navUrl}?pageNum=${pageIndex}`);}});}}initPagination();
}

测试生成的效果

测试时,分别需要测试当少于6页,此时全显示

大于6页,当前页小于6页的时候,显示后面的跳转按纽

大于6+6的时候,并且当前页码数大于总页数减去6的时候,显示前面的跳转按纽

其它的情况就是显示中间的页码加上两边的跳转按纽的情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯(C++ 整数删除 优先队列 )

优先队列&#xff1a; 优先队列具有队列的所有特性&#xff0c;包括队列的基本操作&#xff0c;只是在这基础上添加了内部的一个排序&#xff0c;它本质是一个堆实现的。 1.头文件&定义 #include <queue> #include <functional> //greater<>// 定义 p…

2023 年顶级前端工具

谁不喜欢一个好的前端工具&#xff1f;在本综述中&#xff0c;您将找到去年流行的有用的前端工具&#xff0c;它们将帮助您加快开发工作流程。让我们深入了解一下&#xff01; 在过去的 12 个月里&#xff0c;我在我的时事通讯 Web Tools Weekly 中分享了数百种工具。我为前端…

经典数据库练习题及答案

数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 --4.成绩…

JavaScript DOM可以做什么?

1、通过id获取标签元素 DOM是文档对象模型&#xff0c;它提供了一些属性和方法来方便我们操作document对象&#xff0c;比如getElementById()方法可以通过某个标签元素的id来获取这个标签元素 // 用法 window.document.getElementById(id); // 例子 <!DOCTYPE html> &l…

深度学习模型之yolov8实例分割模型TesorRT部署-python版本

1 模型转换 从github上下载官方yolov8版本&#xff0c;当前使用的版本是2023年9月份更新的版本&#xff0c;作者一直在更新。官网地址 2 加载模型 模型的训练和测试在官方文档上&#xff0c;有详细的说明&#xff0c;yolov8中文文档这里不做过多说明&#xff0c;v8现在训练是…

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?-UFS篇

如果说SSD是赛道上的超级跑车&#xff0c;那UFS更像是专为智能汽车定制的高性能轻量化赛车。UFS采用串行接口技术&#xff0c;像是闪电侠一样&#xff0c;将数据传输的速度推向新高&#xff0c;大幅缩短了系统启动时间和应用程序加载时间&#xff0c;这对追求即时反应的ADAS系统…

从零开始的 dbt 入门教程 (dbt core 命令进阶篇)

引 根据第一篇文章的约定&#xff0c;我想通过接下来的几篇文章带大家进一步了解 dbt 的用法&#xff0c;原计划这篇文章我会介绍 dbt 命令的进阶用法&#xff0c;进一步认识 dbt 的配置以及如何创建增量表等等零零散散十几个方面的知识点&#xff0c;结果在我写完命令部分发现…

深度学习中Numpy的一些注意点(多维数组;数据类型转换、数组扁平化、np.where()、np.argmax()、图像拼接、生成同shape的图片)

文章目录 1多维数组压缩维度扩充维度 2numpy类型转换深度学习常见的float32类型。 3数组扁平化4np.where()的用法5np.argmax()6图像拼接7生成同shape的图片&#xff0c;指定数据类型 1多维数组 a.shape(3,2);既数组h3&#xff0c;w2 a.shape(2,3,2);这里第一个2表示axis0维度上…

奇异值分解(SVD)【详细推导证明】

机器学习笔记 机器学习系列笔记&#xff0c;主要参考李航的《机器学习方法》&#xff0c;见参考资料。 第一章 机器学习简介 第二章 感知机 第三章 支持向量机 第四章 朴素贝叶斯分类器 第五章 Logistic回归 第六章 线性回归和岭回归 第七章 多层感知机与反向传播【Python实例…

Dubbo-admin监控中心

监控中心 Dubbo-admin监控中心执行操作启动provider和consumer项目进行测试总体流程 Dubbo-admin监控中心 dubbo-admin下载路径 git clone https://github.com/apache/dubbo-admin.git图1-1 dubbo-admin项目文件展示 执行操作 # 启动zookeeper# 前端 cd dubbo-admin-ui npm i…

Linux 设备树详解

目录 1、概述 2、节点&#xff08; node&#xff09;和属性&#xff08; property&#xff09; 2.1、DTS 描述键值对的语法&#xff1a; 2.2 节点语法规范说明 2.3节点名及节点路径 2.4 节点别名&#xff08;节点引用&#xff09; 2.5 合并节点内容 2.6 替换节点内容 2…

java:流程控制

一、流程控制语句分类 顺序结构分支结构&#xff08;if&#xff0c;switch&#xff09;循环结构&#xff08;for&#xff0c;while&#xff0c;do...while&#xff09; 二、顺序结构 定义&#xff1a;顺序结构是程序中最基本的流程控制&#xff0c;没有特定的语法结构&#…

Sqoop故障排除指南:处理错误和问题

故障排除是每位数据工程师和分析师在使用Sqoop进行数据传输时都可能遇到的关键任务。Sqoop是一个功能强大的工具&#xff0c;但在实际使用中可能会出现各种错误和问题。本文将提供一个详尽的Sqoop故障排除指南&#xff0c;涵盖常见错误、问题和解决方法&#xff0c;并提供丰富的…

HarmonyOS4.0系列——07、自定义组件的生命周期、路由以及路由传参

自定义组件的生命周期 允许在生命周期函数中使用 Promise 和异步回调函数&#xff0c;比如网络资源获取&#xff0c;定时器设置等&#xff1b; 页面生命周期 即被Entry 装饰的组件生命周期&#xff0c;提供以下生命周期接口&#xff1a; onPageShow 页面加载时触发&#xff…

2023年上半年网络工程师真题(3/3)

41.某主机无法上网&#xff0c;查看本地连接后&#xff0c;发现只有发送包没有接收包&#xff0c;故障原因可能是&#xff08;C&#xff09;。 A.网线没有插好 B.DNS配置错误 C.IP地址配置错误 D.TCP/IP协议故障 如果网线没有插好&#xff0c;就没有发送包没有接收包;DNS配…

UI设计中的插画运用优势(上)

1. 插画是设计的原创性和艺术性的基础 无论是印刷品、品牌设计还是UI界面&#xff0c;更加风格化的插画能够将不同的风格和创意加入其中&#xff0c;在激烈的竞争中更容易因此脱颖而出。留下用户才有转化。 2. 插画是视觉触发器&#xff0c;瞬间传达大量信息 我们常说「一图胜千…

Skydel 23.8新版本发布!GNSS模拟器完成首项实地路测项目

奥本大学自动驾驶团队运用GNSS模拟器完成首项实地路测项目 奥本大学与最近与阿拉巴马州伯明翰的巴伯赛车运动公园合作进行道路测试&#xff0c;该车在没有任何人工干预的情况下成功绕赛道完成了一圈&#xff0c;这也是印地自动驾驶挑战赛中车辆首次在美国专业赛道上完成一圈。…

unity-shader笔记OLD

shader shader在面板中的位置相关代码代码切换shader shader在面板中的位置 选中物体属性面板中 相关代码 代码切换shader 挂载到怪物上的shader名字统一叫body&#xff0c;然后获取上面的SkinnedMeshRender SkinnedMeshRender smr&#xff1b; //恢复到原来的shader …

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?- SSD篇

随着汽车行业的不断发展&#xff0c;对存储的需求也在不断的变化中。早期阶段的汽车对存储的需求主要是收音机、播放器、导航仪等&#xff0c;有些还可以支持光盘和U盘的外接播放。中期阶段&#xff0c;也是当前主流的燃油车行车记录、多媒体、车联网的需求&#xff0c;对存储性…