大二第四周总结——用原生js封装一个分页器

用原生js封装一个分页器

起因:这次项目还是用原生的js来写的,我负责的是后台,分页是后台最常见的一个功能了,于是干脆封装一下,废话少说,直接上代码

这里是基本的样式

.pagination {display: flex;width: 600px;height: 35px;margin: 0 auto;margin-left: 275px;/* border: 1px solid red; */
}.pagination span a {box-sizing: border-box;text-decoration: none;color: black;
}.pagination span {/* border: 1px solid red; */text-align: center;width: 40px;height: 35px;line-height: 35px;margin: 0px 2px;
}.pagination span i {font-size: 10px;font-weight: 100;
}.pagination span img {width: 30px;height: 25px;
}.pagination .pageStyle a {display: block;text-align: center;width: 40px;height: 35px;line-height: 35px;/* background-color: bisque; */border: 1px solid #ccc;border-radius: 5px;
}.pagination .pageStyle a:hover {border: 1px solid rgb(27, 129, 121);
}.pagination .active {background-color: cadetblue;
}

这个是在js里面定义的一个分页器类

class PageClass {                               //定义一个分页器类      constructor(ele, pageNum, page, cb) {   //需要传入4个参数,第一个容器元素,第二个页面总数,第三个当前页面数,第四个为回调函数this.ele = ele;            //定义属性this.pageNum = pageNum;this.page = page;this.cb = cb;this.renderPage();     //执行渲染的方法this.operate();         //给实例化对象绑定各种操作的方法}renderPage() {                   //在类的原型上定义一个渲染的方法let str = '';if (this.pageNum > 5) {     //判断当前分页的页面总数是否超过5页if (this.page <= 4) {         //如果页面总数大于5  ,再判断当前页是否小于或者等于第四页for (let i = 0; i < 5; i++) {        //如果当前页是小于等于4以内的页数 ,遍历1到5if ((i + 1) == this.page) {       //判断当前页是否等于 当前   索引值(索引值从0开始) +  1str += `<span class="pageStyle" myPage="${i + 1}"><a href="javascript:;" class="active">${i + 1}</a></span>`;//等于的话说明渲染的是当前页,给当前页一个active的类名进行渲染} else {  //如果渲染的不是当前页str += `<span class="pageStyle" myPage="${i + 1}"><a href="javascript:;">${i + 1}</a></span>`;//普通渲染就行了}}str += `<span><i>•••</i></span><span class="pageStyle" myPage="${this.pageNum}"><a href="javascript:;">${this.pageNum}</a></span>`;//最后渲染一个最末尾页} else if (this.page > 4 && this.page < this.pageNum - 3) {   //判断当前页是否大于第四页,且小于最大页数减去 3 str += `<span class="pageStyle" myPage="1"><a href="javascript:;">1</a></span><span><i>•••</i></span>`; //渲染一个首页for (let i = this.page - 3; i < this.page + 2; i++) {if ((i + 1) == this.page) { //判断当前正在渲染的是否为当前页str += `<span class="pageStyle" myPage="${i + 1}"><a href="javascript:;" class="active">${i + 1}</a></span>`;//如果是当前页,给一个active类名进行渲染} else {str += `<span class="pageStyle" myPage="${i + 1}"><a href="javascript:;">${i + 1}</a></span>`;//如果不是,普通渲染就行}}str += `<span><i>•••</i></span><span class="pageStyle" myPage="${this.pageNum}"><a href="javascript:;">${this.pageNum}</a></span>`;//渲染一个尾页} else if (this.page >= this.pageNum - 3) {//如果当前页数大于或者等于最大页数 - 3 str += `<span class="pageStyle" myPage="1"><a href="javascript:;">1</a></span><span><i>•••</i></span>`; //渲染一个首页for (let i = this.pageNum - 5; i < this.pageNum; i++) {//从倒数第5页开始渲染if ((i + 1) == this.page) {   //如果渲染的是当前页str += `<span class="pageStyle" myPage="${i + 1}"><a href="javascript:;" class="active">${i + 1}</a></span>`;//增加一个active类名,进行渲染} else {str += `<span class="pageStyle" myPage="${i + 1}"><a href="javascript:;">${i + 1}</a></span>`;//否则普通渲染}}}} else {        //如果最大页数小于等于5for (let i = 0; i < this.pageNum; i++) {     //直接渲染到当前最大页数if ((i + 1) == this.page) {           //判断渲染的是否为当前页数str += `<span class="pageStyle" myPage="${i + 1}"><a href="javascript:;" class="active">${i + 1}</a></span>`;//如果是增加一个active类名,进行渲染} else {str += `<span class="pageStyle" myPage="${i + 1}"><a href="javascript:;">${i + 1}</a></span>`;//否则普通渲染就行了}}}//将所有内容渲染到容器盒子里//第一页//上一页//中间页面//下一页//最后一页this.ele.innerHTML = `<span class="first"><a href="javascript:;"> <img src="/public/img/index.png" alt=""></a></span><span class="prev"><a href="javascript:;"><img src="/public/img/before.png" alt=""></a></span>${str}<span class="next"><a href="javascript:;"><img src="/public/img/after.png" alt=""></a></span><span class="last"><a href="javascript:;"><img src="/public/img/end.png" alt=""></a></span>` ;}operate() {                  //在类原型上定义一个operate的方法,给这个类绑定点击事件const _that = this;        //申明一个常量接收thislet firstEle = this.ele.querySelector(".first");    //获取第一页的元素let lastEle = this.ele.querySelector(".last");      //获取最后一页的元素let nextEle = this.ele.querySelector(".next");      //获取下一页的元素let prevEle = this.ele.querySelector(".prev");      //获取上一页的元素let pageStyleEles = this.ele.querySelectorAll(".pageStyle");    //获取所有的中间页面的元素firstEle.onclick = function () {     //当点击第一页时_that.page = 1;                //让page属性重新赋值为1_that.cb(_that.page);           //并将page属性通过回调函数cb传递出去}lastEle.onclick = function () {      //当点击最后一页时_that.page = _that.pageNum;    //让page属性重新赋值为页面最大值_that.cb(_that.page);          //并将page属性通过回调函数cb传递出去}nextEle.onclick = function () {      //当点击下一页时if (_that.page < _that.pageNum) {   //先判断当前页是否小于最大页_that.page = _that.page + 1;   //如果没有超过,给page属性自增1_that.cb(_that.page);           //并将page属性通过回调函数cb传递出去}}prevEle.onclick = function () {      //当点击上一页时if (_that.page > 1) {           //先判断当前页是否大于第一页_that.page = _that.page - 1;   //如果是大于第一页的话,page属性自减1_that.cb(_that.page);           //并将page属性通过回调函数cb传递出去}}pageStyleEles.forEach(function (pageStyleEle) {       //遍历获取到中间页面的所有元素pageStyleEle.onclick = function () {                //当点击其中一页时_that.page = parseInt(this.getAttribute("myPage")); //获取这个元素自定义属性,myPage,属性值是当前页 ,并将当前页赋值给page属性_that.cb(_that.page);                           //将page属性通过回调函数cb传递出去}});}}

在html页面中

只需要防止这样的一个盒子就行了

  <div class="pagination"> </div>

使用的时候,js里面这样写

let pageEle = document.querySelector(".pagination");            //获取页面渲染的容器
ready(1);                                                   //调用渲染容器的方法,传递初始页面为1
function ready(page) {                                       // 定义一个方法用来渲染容器new PageClass(pageEle, 1000, page, function (page) {         //new 一个PageClass类,传递容器元素,总页面数,当前页面,以及回调函数console.log(page, '看看点击Page的时候页面是否会发生变化');ready(page); //回调函数调用渲染容器的方法getAllUsers(10, page);//这个是自定义的页面变化的时候获取页面数据的渲染表格的方法});
}

整个跑起来大致就是这个样子

至于显示的这个回到首页,上一页,下一页,回到最后一页的图片,可以去阿里妈妈图标库去看看,挑选自己喜欢的。分享到这里就结束了

学技术的话,看到这里就行。


我是分割线


个人的小感悟

很多人可能会选择在过年或者是期末的时候进行总结,那为什么会选择现在进行来一波回忆杀呢?

因为,距离我去年将要加入未来软件工作室就不到4天的时间了。

对我来说,这一年的成长,也许,技术也许是次要的,心理的成长占了绝大部分。

去年的这个时候,来大学快一个月的时间了,对学校的基本情况了解的差不多了,知道了未来是学校最强的小组,一股劲儿的想要来到这里,找到了当时小组大三的学姐,然后学姐把我拉进了未来软件工作室的招新群,等待工作室正式开始招新投简历,然后面试,分到未来五组当中,融入新的团体.......这就是梦的开始,也是很多事情的开始,若要究其根本,命运的齿轮究竟是从什么时候开始转动的 ? 可能是偷偷改志愿学计算机,可能是报考之后在贴吧四处找寻学校信息从此多了一位师父照拂,可能是在知乎找到了熟知学校信息的计算机学姐,从此多了一位领路人,一切的一切,把大学的画卷铺开在我面前......

去年这一年

有难关面前,能成为家人依靠的成就感

有熬夜到凌晨3,4点,连续3天睡眠时间不超过10个小时但依然活力满满的冲劲儿

有趁着水课多,连着整整睡了4,5天的疲惫

有被一次一次的抛弃,再一次一次的振作

有用自己学到的东西解决问题时候的喜悦

更有无数个加一个瞬间把自己从堕落中拉出来

专研自己的热爱

从书中寻找共鸣

去西安看看那富贵迷人眼

看那没被污染前的海

......

一些事情到此完成闭环。

我看到的,我感受的,

回忆太多,可是,经历过的千千万,都抵不过当下这一瞬间的永恒。

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

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

相关文章

PCB知识补充

系列文章目录 文章目录 系列文章目录参考文献PCB知识互连线电阻过孔/铜箔电流能力铜箔载流能力过孔载流能力 热设计电磁兼容及部分要求 参考文献 [1]牛森,张敏娟,银子燕.高速PCB多板互联的电源完整性分析[J].单片机与嵌入式系统应用,2023,23(09). [2]陈之秀,刘洋,张涵舒等.高…

Django中简单的增删改查

用户列表展示 建立列表 views.py def userlist(request):return render(request,userlist.html) urls.py urlpatterns [path(admin/, admin.site.urls),path(userlist/, views.userlist), ]templates----userlist.html <!DOCTYPE html> <html lang"en">…

【Java】反射

1.什么是反射机制? Java 反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类中的所有属性和方法&#xff0c;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 的反射机制…

《软件工程与计算》期末考试真题范例及答案

今天分享一套针对《软件工程与计算》这本书的真题案例&#xff0c;有关《软件工程与计算》23章内容的重点知识整理&#xff0c;已经总结在了博客专栏中&#xff0c;有需要的自行阅读&#xff1a; 《软件工程与计算》啃书总结https://blog.csdn.net/jsl123x/category_12468792.…

进程状态和优先级

文章目录 进程状态Linux中具体的进程状态僵尸进程孤儿进程 进程优先级 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 进程状态 进程在操…

每天一点python——day66

#每天一点Python——66 #字符串的分隔 #如图&#xff1a; #方法①split()从左开始分隔&#xff0c;默认空格为分割字符&#xff0c;返回值是一个列表 shello world jisuanji#首先创建一个字符串 list1s.split() print(list1)#输出结果是&#xff1a;[hello, world, jisuanji]注…

Git的原理与使用(一)

目录 Git初始 Git安装 Git基本操作 创建git本地仓库 配置git 工作区,暂存区,版本库 添加文件,提交文件 查看.git文件 修改文件 版本回退 小结 Git初始 git是一个非常强大的版本控制工具.可以快速的将我们的文档和代码等进行版本管理. 下面这个实例看理解下为什么需…

Java 简单实现一个 UDP 回显服务器

文章目录 UDP 服务端UDP 客户端实现效果UDP 服务端(实现字典功能)总结 UDP 服务端 package network;import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;public class UdpEchoServer {private Da…

【开源】基于Vue.js的大学兼职教师管理系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、研究内容三、界面展示3.1 登录注册3.2 学生教师管理3.3 课程管理模块3.4 授课管理模块3.5 课程考勤模块3.6 课程评价模块3.7 课程成绩模块3.8 可视化图表 四、免责说明 一、摘要 1.1 项目介绍 大学兼职教师管理系统&#xff0…

Java13新增特性

前言 前面的文章&#xff0c;我们对Java9、Java10、Java11、Java12 的特性进行了介绍&#xff0c;对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 今天我们来一起看一下Java13这个版本的一些重要信息 版本介绍 Java 13 是在 2019 年 9 月 17 日…

Technology Strategy Patterns 学习笔记9 - bringing it all together

1 Patterns Map 2 Creating the Strategy 2.1 Ansoff Growth Matrix 和owth-share Matrix 区别参见https://fourweekmba.com/bcg-matrix-vs-ansoff-matrix/ 3 Communicating

Docker进阶——再次认识docker的概念 Docker的结构 Docker镜像结构 镜像的构建方式

前言 在微服务大量应用的互联网时代&#xff0c;经常能看到docker的身影。作为docker的爱好者&#xff08;在服务器安装MySQL&#xff0c;Redis。。。我用的都是docker&#xff09;&#xff0c;我也会持续深入学习和认识docker。 本篇博客再次介绍docker的基本概念&#xff0…

FPGA UDP RGMII 千兆以太网(3)ODDR

1 xilinx原语 在 7 系列 FPGA 中实现 RGMII 接口需要借助 5 种原语,分别是:IDDR、ODDR、IDELAYE2、ODELAYE2(A7 中没有)、IDELAYCTRL。其中,IDDR和ODDR分别是输入和输出的双边沿寄存器,位于IOB中。IDELAYE2和ODELAYE2,分别用于控制 IO 口输入和输出延时。同时,IDELAYE2 …

R系组播调优方案

修改/etc/sysctl.conf添加如下内容&#xff1a; Vim /etc/sysctl.con net.ipv4.ip_forward1 net.ipv4.ip_nonlocal_bind1 net.ipv4.conf.all.rp_filter0 net.ipv4.conf.default.rp_filter0 net.bridge.bridge-nf-call-arptables 0 net.bridge.bridge-nf-call-ip6tables 0 …

深度学习之基于Pytorch框架的MNIST手写数字识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 MNIST是一个手写数字识别的数据集&#xff0c;是深度学习中最常用的数据集之一。基于Pytorch框架的MNIST手写数字识…

腾讯云3年期轻量应用服务器优惠(薅羊毛教程)

腾讯云轻量应用服务器特价是有新用户限制的&#xff0c;所以阿腾云建议大家选择3年期轻量应用服务器&#xff0c;一劳永逸&#xff0c;免去续费困扰。腾讯云轻量应用服务器3年优惠可以选择2核2G4M和2核4G5M带宽&#xff0c;3年轻量2核2G4M服务器540元&#xff0c;2核4G5M轻量应…

Python实用技巧:将 Excel转为PDF

将Excel文件转换为PDF可以方便储存表格数据&#xff0c;此外在打印或共享文档时也能确保表格样式布局等在不同设备和操作系统上保持一致。今天给大家分享一个使用第三方Python库Spire.XLS for Python 实现Excel转PDF的简单方法。 实现步骤 首先&#xff0c;通过pip命令来安装依…

AWS云服务器EC2实例进行操作系统迁移

AWS云服务器EC2实例进行操作系统迁移 文章目录 AWS云服务器EC2实例进行操作系统迁移1. 亚马逊EC2云服务器简介1.2 亚马逊EC2云务器与弹性云服务器区别 2. 亚马逊EC2云服务器配置流程2.1 亚马逊EC2云服务器实例配置2.1.1 EC2实例购买教程2.1.1 EC2实例初始化配置2.1.2 远程登录E…

Python基础入门例程51-NP51 列表的最大与最小(循环语句)

最近的博文&#xff1a; Python基础入门例程50-NP50 程序员节&#xff08;循环语句&#xff09;-CSDN博客 Python基础入门例程49-NP49 字符列表的长度-CSDN博客 Python基础入门例程48-NP48 验证登录名与密码&#xff08;条件语句&#xff09;-CSDN博客 目录 最近的博文&…

Postman —— post请求数据类型

1、Postman中post的数据类型 post中有以下数据类型 1、form-data 2、x-www-form-urlencoded 3、raw 4、binary 2、Postman请求不同的post数据类型 from-data multipart/form-data&#xff0c;它将表单的数据组织成Key-Value形式&#xff0c;也可以上传文件&#xff0c;当…