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案例 - 分页的更多相关文章

  1. 原生js版分页插件

    之前我在自己的博客里发表了一篇用angularJs自定义指令实现的分页插件,今天简单改造了一下,改成了原生JavaScript版本的分页插件,可以自定义一些简单配置,特此记录下来.如有不足之处,欢迎指 ...

  2. 原生JS实现分页效果2.0(新增了上一页和下一页,添加当前元素样式)

    虽然写的很烂,但至少全部都是自己写的,因为这个没有固定的顺序,所以就没有封装,如果你技术好的话,可以你写的分享给我,谢谢. <!DOCTYPE html><html lang=&qu ...

  3. 原生JS实现分页效果1.0

    不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en">&l ...

  4. 纯js实现分页

    原理:所有数据已加载好,js通过遍历部分显示,实现分页效果 html代码 <html> <head> <meta charset='utf-8'> <scri ...

  5. 单篇文章JS模拟分页

    废话部分 前两天做了一个前台分页插件,支持ajax读取数据绑定前台 和 url带页码参数跳转两种方式.于是稍加改动,做了一个单篇文章js模拟分页的代码,为什么说是模拟分页呢?因为在服务器响应HTML请 ...

  6. js前端分页之jQuery

    锋利的js前端分页之jQuery 大家在作分页时,多数是在后台返回一个导航条的html字符串,其实在前端用js也很好实现. 调用pager方法,输入参数,会返回一个导航条的html字符串.方法的内部比 ...

  7. Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页

    本博客介绍基于Spring Data这款orm框架加上Jquery.pagination插件实现的分页功能. 介绍一下Spring Data框架 spring Data : Spring 的一个子项目 ...

  8. JS表格分页(封装版)

    HTML代码: <html> <head> <meta charset='utf-8'> <script type="text/javascript ...

  9. JS重构分页

    JS重构分页 很早以前写过一个Jquery分页组件,但是当时写的组件有个缺点,当时的JS插件是这样设计的:比如:点击  -->  查询按钮 ---> 发ajax请求 返回总页数和所有数据, ...

随机推荐

  1. Scrapy笔记11- 模拟登录

    Scrapy笔记11- 模拟登录 有时候爬取网站的时候需要登录,在Scrapy中可以通过模拟登录保存cookie后再去爬取相应的页面.这里我通过登录github然后爬取自己的issue列表来演示下整个 ...

  2. SimpleDateFormat 中的yyyy-MM-dd HH:mm:ss.SSS说明

    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 转换的格式:yyyy是完整的西元年,MM是月份, ...

  3. plv8 + hashids 生成短连接id

    此文章是转载文章的一个学习,稍有改动 环境准备 plv8 环境 version: '3.6' services:  postgres:    image: dalongrong/plv8:2.3.12 ...

  4. 如何使用docker部署springcloud???

    如何使用docker部署springcloud??? springcloud 必须基于 springboot 项目来开发, 这里讲解springboot项目的部署, springcloud项目也是同理 ...

  5. 请解释一下css3的flexbox(弹性盒布局模型),以及适用场景

    弹性盒模型是c3规范的新的布局方式,该布局模型的目的是提供一种更加高效的方式来对容器的条目进行布局.对齐和分配空间.在传统的布局中,block布局是把块级元素在垂直方向从上向下一次排列的,而inlin ...

  6. Set学习笔记

    今天又去看了一下STL里的set,来这里水一下博客 What is set? set的本质是一种功能受限的平衡树,不支持重复数字,也就是说如果插入一大堆数字12,输出它的长度还是1 如何定义 定义 s ...

  7. 【树状数组】【P5069】[Ynoi2015]纵使日薄西山

    Description 给定一个长度为 \(n\) 的非负整数序列 \(\{a_n\}\),\(q\) 次操作,每次要么单点修改序列某个值,要么查询整个序列需要操作多少次才能变成全 \(0\). 一次 ...

  8. 从零和使用mxnet实现dropout

    需求: 从零和使用mxnet实现dropout 数据集: 使用load_digits()手写数字数据集 要求: 使用1个掩藏层n_hidden1 = 36,激活函数为relu,损失函数为softmax ...

  9. eclipse中自动生成serialVersionUID

     serialVersionUID作用:  序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性.       如果你修改代码重新部署后出现序列化错误,可以考虑给相应的类增加seri ...

  10. 什么是SQL Server2019大数据群集?

    从SQL Server 2019(15.x)开始,SQL Server大数据群集允许您部署在Kubernetes上运行的SQL Server,Spark和HDFS容器的可伸缩群集.这些组件并排运行,使 ...