JS案例 - 分页
1.html文件
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>Document</title>
- </head>
- <style>
- div {
- width: 800px;
- height: 40px;
- border: 1px solid black;
- margin: 30px auto;
- user-select: none;
- }
- </style>
- <body>
- <div id="div1"></div>
- <div id="div2"></div>
- <script src="./navg.js"></script>
- <script>
- new Navg('#div1', {
- pageTag: {
- first: '首页1',
- prev: '上一页1',
- list: null,
- next: '下一页1',
- last: '末页1',
- },
- pageInfo: {
- pageNum: 5, // 当前页数
- pageSize: 10, // 每页显示条数
- totalData: 1000, // 总条数
- totalPage: 100, // 总页数 = 向上取整(总条数 / 每页显示条数)
- }
- },() => {
- console.log(11)
- });
- new Navg('#div2', {
- pageTag: {
- first: '首页',
- prev: '上一页',
- list: null,
- next: '下一页',
- last: '末页',
- },
- pageInfo: {
- pageNum: 2, // 当前页数
- pageSize: 10, // 每页显示条数
- totalData: 1000, // 总条数
- totalPage: 100, // 总页数 = 向上取整(总条数 / 每页显示条数)
- }
- });
- </script>
- </body>
- </html>
2.js文件
- function Navg(ele, options, calback) {
- this.options = options;
- this.calback = calback || function () { };
- // ## 默认数据
- this.defaultOptions = {
- pageTag: {
- first: '首页',
- prev: '上一页',
- list: null,
- next: '下一页',
- last: '末页',
- },
- pageInfo: {
- pageNum: 2, // 当前页数
- pageSize: 10, // 每页显示条数
- totalData: 1000, // 总条数
- totalPage: 100, // 总页数 = 向上取整(总条数 / 每页显示条数)
- }
- }
- this.defaultOptions.pageInfo.totalPage = Math.ceil(this.defaultOptions.pageInfo.totalData / this.defaultOptions.pageInfo.pageSize)
- //获取页面属性
- this.divObj = document.querySelector(ele)
- this.divObj.style.display = 'flex'
- this.divObj.style.justifyContent = 'center'
- this.divObj.style.alignItems = 'center'
- // 重置数据
- this.setDefalutOptions();
- // 调用
- this.createpage();
- // 初始化完成后绑定事件
- this.clickEvent();
- }
- // 设置默认数据
- Navg.prototype.setDefalutOptions = function () {
- // 判断用户是否传值
- if(this.options == undefined || (Object.keys(this.options).length == 0)){
- return;
- }
- // pageTag
- this.defaultOptions.pageTag.first = this.options.pageTag.first;
- this.defaultOptions.pageTag.prev = this.options.pageTag.prev;
- this.defaultOptions.pageTag.list = this.options.pageTag.list;
- this.defaultOptions.pageTag.next = this.options.pageTag.next;
- this.defaultOptions.pageTag.last = this.options.pageTag.last;
- // pageInfo
- this.defaultOptions.pageInfo.pageNum = this.options.pageInfo.pageNum;
- this.defaultOptions.pageInfo.pageSize = this.options.pageInfo.pageSize;
- this.defaultOptions.pageInfo.totalData = this.options.pageInfo.totalData;
- this.defaultOptions.pageInfo.totalPage = this.options.pageInfo.totalPage;
- }
- // 创建分页标签
- Navg.prototype.createpagenum = function () {
- let pageInfo = this.defaultOptions.pageInfo;
- if (pageInfo.pageNum < 5) {
- for (let i = 1; i <= 5; i++) {
- this.createP(i, ele = 'p')
- }
- this.createP('...', 'span')
- for (let i = pageInfo.totalPage - 1; i <= pageInfo.totalPage; i++) {
- this.createP(i, ele = 'p')
- }
- } else if (pageInfo.pageNum == 5) {
- for (let i = 1; i <= 7; i++) {
- this.createP(i, ele = 'p')
- }
- this.createP('...', 'span')
- for (let i = pageInfo.totalPage - 1; i <= pageInfo.totalPage; i++) {
- this.createP(i, ele = 'p')
- }
- } else if (pageInfo.pageNum > 5 && pageInfo.pageNum <= pageInfo.totalPage - 4) {
- this.createP(1)
- this.createP(2)
- this.createP('...', 'span')
- for (let i = parseInt(pageInfo.pageNum) - 2; i <= parseInt(pageInfo.pageNum) + 2; i++) {
- this.createP(i, ele = 'p')
- }
- this.createP('...', 'span')
- for (let i = pageInfo.totalPage - 1; i <= pageInfo.totalPage; i++) {
- this.createP(i, ele = 'p')
- }
- } else if (pageInfo.pageNum >= pageInfo.totalPage - 4) {
- this.createP(1)
- this.createP(2)
- this.createP('...', 'span')
- this.createP('...', 'span')
- for (let i = pageInfo.totalPage - 4; i <= pageInfo.totalPage; i++) {
- this.createP(i, ele = 'p')
- }
- }
- }
- // 创建分页标签
- Navg.prototype.createpage = function () {
- let pageTag = this.defaultOptions.pageTag;
- let pageInfo = this.defaultOptions.pageInfo;
- let divObj = this.divObj;
- divObj.innerHTML = '';
- for (let attr in pageTag) {
- let pObj = document.createElement('p')
- let textObj = document.createTextNode(pageTag[attr])
- if (attr == 'list') {
- pageTag.list = pObj
- } else {
- pObj.appendChild(textObj)
- pObj.style.border = '1px solid black'
- pObj.style.margin = '0 5px'
- pObj.style.padding = '0 5px'
- pObj.style.display = 'inline-block'
- }
- divObj.appendChild(pObj)
- }
- //禁用
- let pObjs = this.divObj.querySelectorAll('p')
- if (pageInfo.pageNum == 1) {
- pObjs[0].style.background = '#ccc'
- pObjs[1].style.background = '#ccc'
- }
- if (pageInfo.pageNum == pageInfo.totalPage) {
- pObjs[3].style.background = '#ccc'
- pObjs[4].style.background = '#ccc'
- }
- this.createpagenum()
- this.calback();
- }
- // // ##创建P标签
- Navg.prototype.createP = function (i, ele = 'p') {
- let pageInfo = this.defaultOptions.pageInfo;
- let pObj = document.createElement(ele)
- let textObj = document.createTextNode(i)
- pObj.appendChild(textObj)
- if (i == pageInfo.pageNum) {
- pObj.style.background = 'skyblue'
- }
- if (ele != 'span') {
- pObj.style.border = '1px solid black'
- pObj.style.margin = '0 5px'
- pObj.style.padding = '0 5px'
- pObj.style.display = 'inline-block'
- }
- this.defaultOptions.pageTag.list.appendChild(pObj)
- }
- // 绑定事件
- Navg.prototype.clickEvent = function () {
- let pageInfo = this.defaultOptions.pageInfo;
- let pageTag = this.defaultOptions.pageTag;
- this.divObj.addEventListener('click', (e) => {
- e = e || window.event
- let target = e.target
- let tc = target.innerHTML
- if (target.nodeName == 'P' && tc == pageTag.first) {
- pageInfo.pageNum = 1
- this.createpage()
- }
- if (target.nodeName == 'P' && tc == pageTag.prev && pageInfo.pageNum > 1) {
- pageInfo.pageNum -= 1
- this.createpage()
- }
- if (target.nodeName == 'P' && parseInt(tc) > 0) {
- pageInfo.pageNum = tc
- this.createpage()
- }
- if (target.nodeName == 'P' && tc == pageTag.next && pageInfo.pageNum != pageInfo.totalPage) {
- pageInfo.pageNum = parseInt(pageInfo.pageNum) + 1
- this.createpage()
- }
- if (target.nodeName == 'P' && tc == pageTag.last) {
- pageInfo.pageNum = pageInfo.totalPage
- this.createpage()
- }
- })
- }
- 特此声明:如需转载请注明出处,如有疑问请及时提出以便于改正,如有侵权,联系删除,谢谢
JS案例 - 分页的更多相关文章
- 原生js版分页插件
之前我在自己的博客里发表了一篇用angularJs自定义指令实现的分页插件,今天简单改造了一下,改成了原生JavaScript版本的分页插件,可以自定义一些简单配置,特此记录下来.如有不足之处,欢迎指 ...
- 原生JS实现分页效果2.0(新增了上一页和下一页,添加当前元素样式)
虽然写的很烂,但至少全部都是自己写的,因为这个没有固定的顺序,所以就没有封装,如果你技术好的话,可以你写的分享给我,谢谢. <!DOCTYPE html><html lang=&qu ...
- 原生JS实现分页效果1.0
不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en">&l ...
- 纯js实现分页
原理:所有数据已加载好,js通过遍历部分显示,实现分页效果 html代码 <html> <head> <meta charset='utf-8'> <scri ...
- 单篇文章JS模拟分页
废话部分 前两天做了一个前台分页插件,支持ajax读取数据绑定前台 和 url带页码参数跳转两种方式.于是稍加改动,做了一个单篇文章js模拟分页的代码,为什么说是模拟分页呢?因为在服务器响应HTML请 ...
- js前端分页之jQuery
锋利的js前端分页之jQuery 大家在作分页时,多数是在后台返回一个导航条的html字符串,其实在前端用js也很好实现. 调用pager方法,输入参数,会返回一个导航条的html字符串.方法的内部比 ...
- Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页
本博客介绍基于Spring Data这款orm框架加上Jquery.pagination插件实现的分页功能. 介绍一下Spring Data框架 spring Data : Spring 的一个子项目 ...
- JS表格分页(封装版)
HTML代码: <html> <head> <meta charset='utf-8'> <script type="text/javascript ...
- JS重构分页
JS重构分页 很早以前写过一个Jquery分页组件,但是当时写的组件有个缺点,当时的JS插件是这样设计的:比如:点击 --> 查询按钮 ---> 发ajax请求 返回总页数和所有数据, ...
随机推荐
- hdu5285-wyh2000 and pupil-(染色法二分图判定)
http://acm.hdu.edu.cn/showproblem.php?pid=5285 题意:把互不认识的人分到两个组,第一组人数尽可能多. 题解:把互不认识的人连起来,当作二分图,二分图可能有 ...
- (二)STM32开发例程
1控制LED和继电器 除了 PA11和PA12其他都可以 void setup() { pinMode(PC13, OUTPUT); pinMode(PC14, OUTPUT); pinMode(PC ...
- 5.服务注册与发现Consul,简学API,手动注册和删除服务
package main import ( httptransport "github.com/go-kit/kit/transport/http" mymux "git ...
- Linux操作中应该注意的问题
1.覆盖问题 (1)cp覆盖 (2)scp覆盖 (3)重定向 “>” 覆盖 (4)tar覆盖 2.磁盘问题 (1)GPT格式的分区会覆盖磁盘上原有的分区 (2)在/etc/fstab中写入完成后 ...
- 概率论基础知识(Probability Theory)
概率(Probability):事件发生的可能性的数值度量. 组合(Combination):从n项中选取r项的组合数,不考虑排列顺序.组合计数法则:. 排列(Permutation):从n项中选取r ...
- React 获取真实Dom v8.6.2版本
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java线程池源码的理解
线程池 新建线程和切换线程的开销太大了,使用线程池可以节省系统资源. 线程池的关键类:ThreadPoolExecutor. 该类中包含了大量的多线程与并发处理工具,包括ReentrantLock.A ...
- 对称加密与非对称加密,及Hash算法
一 , 概述 在现代密码学诞生以前,就已经有很多的加密方法了.例如,最古老的斯巴达加密棒,广泛应用于公元前7世纪的古希腊.16世纪意大利数学家卡尔达诺发明的栅格密码,基于单表代换的凯撒密码.猪圈密码, ...
- 2019年上海市大学生网络安全大赛两道misc WriteUp
2019年全国大学生网络安全邀请赛暨第五届上海市大学生网络安全大赛 做出了两道Misc== 签到 题干 解题过程 题干提示一直注册成功,如果注册失败也许会出现flag. 下载下来是包含010edito ...
- 在spring管理的类的要注意问题
特别时写框架的时候, 注意依赖引用,类的成员变量不要随便new,看spring容器中是否管理过,new出来的时其他的对象了