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. nodemcu固件的烧录及lua开发

    一.板子介绍 NodeMCU 1.0/ESP 8266 12E 该模块是安信可公司生产的,并且提供全部开发资料. 对该模块的开发有两种方式: 一种是基于乐鑫官方推出的SDK开发包在 安信可ESP的一体 ...

  2. plv8 中使用 eval 函数执行表达式计算

    在js 开发中我们都说eval 函数是邪恶的,但是此函数也有好多妙用,以下是几个简单的案例 eval 执行基于js 的表达式计算 比如我们有以下表 CREATE TABLE rules (    id ...

  3. VS Code 安装与配置(使用MSYS2环境与mingw-w64 编译环境)

     更正了顺序,之前不知道怎么回事,内容顺序乱了 力求完美.详细,所以希望懂的人留言指点一下. 目前已经开始添加原理解释,希望大家能分享一些gcc gdb C语言等方面优秀链接 后续会慢慢增添内容,修正 ...

  4. TCP四次挥手客户端关闭链接为什么要等待2倍MSL

    最长报文寿命 在TCP协议中,当发送方发送释放连接报文收到确认报文后,只是在一个方向上断开了TCP连接,然后,接收方发送释放连接的报文,发送方回复确认.此时,连接还没有释放,发送方要等待2MSL(ma ...

  5. ZROI1119 【十一·联考】幸福

    ZROI1119 [十一·联考]幸福 传送门 一道矩阵快速幂. #include<iostream> #include<cstdio> #include<algorith ...

  6. 图解 Java 垃圾回收机制,写得非常好!

    阅读本文大概需要 3.7 分钟. 翻译:Rhys_Lee, AzureSora, 溪边九节, 小小菜鸟鸡 blog.csdn.net/zl1zl2zl3/article/details/9090408 ...

  7. 对称加密与非对称加密,及Hash算法

    一 , 概述 在现代密码学诞生以前,就已经有很多的加密方法了.例如,最古老的斯巴达加密棒,广泛应用于公元前7世纪的古希腊.16世纪意大利数学家卡尔达诺发明的栅格密码,基于单表代换的凯撒密码.猪圈密码, ...

  8. 【Gamma】Scrum Meeting 10

    目录 写在前面 任务进度表 燃尽图 照片 写在前面 例会时间:6.8 22:30-23.00 例会地点:微信群语音通话 代码进度记录github在这里 任务进度表 注:点击链接跳转至相应的issue ...

  9. java 执行 shell脚本通过mysql load data导入数据

    1:load_data_test.sh #!/bin/sh load_data_log=/mnt/load_data_test/load.log load_sql="LOAD DATA LO ...

  10. ubuntu docker 搭建 mongodb,开启授权访问 redis,mysql mssql 备份还原

    命令安装docker 如果您想从Ubuntu存储库安装docker版本,则可以运行下面的apt命令. sudo apt install docker.io等到安装完成后,您可以启动Docker并使用s ...