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

news2024/12/26 22:51:14

用原生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到5
                    if ((i + 1) == this.page) {       //判断当前页是否等于 当前   索引值(索引值从0开始) +  1
                        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 > 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 {        //如果最大页数小于等于5
            for (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;        //申明一个常量接收this
        let 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.coloradmin.cn/o/1199554.html

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

相关文章

windows HOOK学习(一)

了解HOOK 一&#xff1a;HOOK是什么&#xff1f;二&#xff1a;HOOK的分类三&#xff1a;HOOK的原理&#xff1f;四&#xff1a;为什么全局钩子HOOK必须写到DLL中&#xff1f;五&#xff1a;HOOK的类型 一&#xff1a;HOOK是什么&#xff1f; hook就是我们平时听到的钩子&…

Arduino ESP8266使用AliyunIoTSDK.h连接阿里云物联网平台

文章目录 1、AliyunIoTSDK简介2、相关库安装3、阿里云创建产品&#xff0c;订阅发布4、对开源的Arduino ESP8266源代码修改5、使用阿里云点亮一个LED灯6、设备向阿里云上传温度数据7、项目源码 1、AliyunIoTSDK简介 AliyunIoTSDK是arduino的一个库&#xff0c;可以在arduino的…

第 371 场 LeetCode 周赛题解

A 找出强数对的最大异或值 I 模拟 class Solution { public:int maximumStrongPairXor(vector<int> &nums) {int n nums.size();int res 0;for (auto x: nums)for (auto y: nums)if (abs(x - y) < min(x, y))res max(res, x ^ y);return res;} };B 高访问员工 …

Maya 2024 for Mac(3D建模软件)

Maya 2024是一款三维计算机图形软件&#xff0c;具有强大的建模、动画、渲染、特效等功能&#xff0c;广泛应用于影视、游戏、广告等行业。以下是Maya 2024软件的主要功能介绍&#xff1a; 建模&#xff1a;Maya 2024具有强大的建模工具&#xff0c;包括多边形建模、曲面建模、…

Technology Strategy Patterns 学习笔记6-Communicating the Strategy-Approach Patterns

1 30-Second Answer 1.1 类似麦肯锡电梯谈话 Map an outline of three bullet points in your head, and then give the executives the simple, declarative, definitive answerAdd your three reasons or characterizations with your three bullet points also as high-le…

计算机网络——b站王道考研笔记

第一章 计算机网络体系结构 1.计算机网络概述 &#xff08;1&#xff09;概念 计算机网络是一个将分散的&#xff0c;具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统&#xff1b; 是互连的&#…

第18章 类集框架

通过本章需要掌握Java设置类集的主要目的与实现原理&#xff0c;掌握Collection接口的作用及小狐妖操作方法&#xff0c;掌握Collection子接口List、Set的区别及常用子类的使用与核心实现原理&#xff0c;掌握Map接口的作用及与Collection接口的区别&#xff0c;理解Map接口设计…

云原生 黑马Kubernetes教程(K8S教程)笔记——kubernetes介绍。Master集群控制节点、Node工作负载节点、Pod控制单元

参考文章&#xff1a;kubernetes介绍 文章目录 1. Kubernetes介绍1.1 应用部署方式演变传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上虚拟化部署&#xff1a;可以在一台物理机上运行多个虚拟机&#xff0c;每个虚拟机都是独立的一个环境&#xff…

jQuery和BootStrap

文章目录 jQuery1、jQuery介绍2、jQuery的选择器2.1、直接查找2.2、导航查找 3、jQuery的绑定事件4、jQuery的操作标签5、jQuery的动画5.1、基本方法5.2、自定义动画 6、扩展方法 (插件机制)7、BootStrap jQuery 1、jQuery介绍 jQuery是什么 jQuery是一个快速、简洁的JavaSc…

前端面试题 计算机网络

文章目录 ios 7层协议tcp协议和udp协议的区别tcp协议如何确保数据的可靠http和tcp的关系url输入地址到呈现网页有哪些步骤post和get本质区别&#xff0c;什么时候会触发二次预检GET请求&#xff1a;POST请求&#xff1a;触发二次预检&#xff08;CORS中的预检请求&#xff09;&…

数据结构与算法 | 第四章:字符串

本文参考网课为 数据结构与算法 1 第四章字符串&#xff0c;主讲人 张铭 、王腾蛟 、赵海燕 、宋国杰 、邹磊 、黄群。 本文使用IDE为 Clion&#xff0c;开发环境 C14。 更新&#xff1a;2023 / 11 / 12 数据结构与算法 | 第四章&#xff1a;字符串 字符串概念字符串字符字符…

Unbuntu安装、测试和卸载gcc11

GCC 可用于编译 C、C&#xff0c;本文介绍如何 Ubuntu 上安装 gcc11、测试和卸载它。 1. 在Ubuntu 上安装 gcc11 添加工具链存储库 sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test在 Ubuntu 上安装 gcc11 sudo apt install -y gcc-11验证 gcc11 版本 gcc-11 --v…

如何提升管理组织能力?

组织能力能力属于管理能力中的一部分&#xff0c;所以也称之为管理组织能力&#xff0c;组织是将人和事物的组合&#xff0c;有效的梳理和导向结果的能力。每个人都有组织能力&#xff0c;只是能力和效率上存在较大的差异。 一人的组织能力从学生时代就能体现出来&#xff0c;…

springboot高校全流程考勤系统-计算机毕设 附源码 27637

Springboot高校全流程考勤系统 摘 要 本文针对高校考勤等问题&#xff0c;对其进行研究分析&#xff0c;然后开发设计出高校全流程考勤系统以解决问题。高校全流程考勤系统系统主要功能模块包括&#xff1a;考勤签到、课程信息、考勤情况、申请记录列表等&#xff0c;系统功能设…

财务报告是什么

财务报告是什么 财务报告是企业对外提供的反映企业某一特定日期的财务状况和某一会计期间的经营成果、现金流量等会计信息的文件。 根据财务报告的定义&#xff0c;财务报告具有以下几层含义&#xff1a;一是财务报告应当是对外报告&#xff0c;其服务对象主要是投资者、债权人…

yolo系列报错(持续补充ing)

文章目录 export GIT_PYTHON_REFRESHquiet解决 没有pt权重文件解决 python文件路径报错解决 读取文件列名报错解决 导入不同文件夹出错解决 megengine没有安装解决然后你发现它竟然还没有用 export GIT_PYTHON_REFRESHquiet 设置环境变量 GIT_PYTHON_REFRESH &#xff0c;这个…

postgresql实现job的六种方法

简介 在postgresql数据库中并没有想oracle那样的job功能&#xff0c;要想实现job调度&#xff0c;就需要借助于第三方。本人更为推荐kettle&#xff0c;pgagent这样的图形化界面&#xff0c;对于开发更为友好 优势劣势Linux 定时任务&#xff08;crontab&#xff09; 简单易用…

【强化学习】18 —— SAC( Soft Actor-Critic)

文章目录 前言最大熵强化学习不同动作空间下的最大熵强化学习基于能量的模型软价值函数最大熵策略 Soft Q-learningSoft Q-IterationSoft Q-Learning近似采样与SVGD伪代码 Soft Actor-Critic伪代码代码实践连续动作空间离散动作空间 参考与推荐 前言 之前的章节提到过在线策略…

macOS Big Sur(macos11版本)

macOS Big Sur是苹果推出的最新操作系统&#xff0c;具有以下特点&#xff1a; 全新的设计风格&#xff1a;Big Sur采用了全新的设计语言&#xff0c;包括更加圆润的窗口和控件、更加鲜明的色彩和更加简洁的界面。这种设计风格使得操作系统更加美观和易用。强大的性能表现&…