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. APIO2019游记

    Day -n~Day -2 文化课好难啊.. Day -1~Day 0 颓颓颓 Day 1 人生第一次用Linux 根本不会 早上刚学会怎么编译 不到1h就上考场实战了 开始之后写了读优 一直编译失败 ...

  2. MQ异步同步搜索引擎ElasticSearch数据踩坑

    业务背景 在大型网站中,为了减少DB压力.让数据更精准.速度更快,将读拆分出来采用搜索引擎来为DB分担读的压力,ElasticSearch就是目前市面上比较流行的搜索引擎,他的检索速度奇快.支持各种复 ...

  3. Redis4.0.9最新版本安装时出现的问题

    Redis Redis(REmote DIctionary Server,远程数据字典服务器)是开源的内存数据库,常用作缓存或者消息队列. Redis的特点: Redis存在于内存,使用硬盘作为持久化 ...

  4. C程序获取命令行参数

    命令行参数 命令行界面中,可执行文件可以在键入命令的同一行中获取参数用于具体的执行命令.无论是Python.Java还是C等等,这些语言都能够获取命令行参数(Command-line argument ...

  5. ValueError: Graph disconnected: cannot obtain value for tensor Tensor

    一般是Input和下面的变量重名了,导致model里面的input变成了第二次出现的Input变量,而不是最开始模型中作为输入的Input变量 改正方法:给第二个变量赋一个新名字即可

  6. Golang微服务实践

    背景 在之前的文章<漫谈微服务>我已经简单的介绍过微服务,微服务特性是轻量级跨平台和跨语言的服务,也列举了比较了集中微服务通信的手段的利弊,本文将通过RPC通信的方式实现一个增删查Redi ...

  7. Python爬虫爬取BT之家找电影资源

    一.写在前面 最近看新闻说圣城家园(SCG)倒了,之前BT天堂倒了,暴风影音也不行了,可以说看个电影越来越费力,国内大厂如企鹅和爱奇艺最近也出现一些幺蛾子,虽然目前版权意识虽然越来越强,但是很多资源在 ...

  8. leetcode 13. Integer to Roman

    使用eval,特别处理6个case var romanToInt = function (s) { const map = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C ...

  9. cad.net 定义lisp

    首先是传参型lisp的定义: (addLine (getpoint)) //定义lisp传入参数的例子 //复制到命令栏运行: (addLine (getpoint)) [LispFunction(& ...

  10. Arcmap图层浏览遇到ORA-07445 [QCDLAUCN] 错误

    Oracle 12.1.0.2版本,在图层浏览时遇到了ORA-07445 [QCDLAUCN] 错误.根据MOS的查询结果,得知这是一个bug (Doc ID 1932725.1): 文章中同时给出了 ...