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请求 返回总页数和所有数据, ...
随机推荐
- 【Mybatis】传入参数 对象+单参
Integer update( @Param(value="bean") TXNJSTXNDetailTBBean bean, @Param(value="table&q ...
- 待办事项App 评测
1. 敬业签 2. Microsoft To-Do(奇妙清单) 3. Evernote 4.one note 5.Google Keep 6.to-do-ist 7.365 日历 8.Any.Do 9 ...
- 洛谷 p2055 假期的宿舍 题解
好长时间没更博客了 因为实在太蒻了 这让本蒟蒻怎么办 今天终于遇到了一道模板题(之前也有,不过太蒻了都不会) 不过...写代码5分钟,调试2小时 分界线:回归正题 这个就是普通的匈牙利算法 差不多 思 ...
- 第10组 Beta冲刺(1/4)
队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 继续学习Android studio和Java 制作剩余界面前端 展示GitHub当日代码/文档签入记录 ...
- Mysql之配置双主热备+keeepalived.md
准备 1 1. 双主 master1 192.168.199.49 2 master2 192.168.199.50 3 VIP 192.168.199.52 //虚拟IP 4 2.环境 master ...
- Golang微服务实践
背景 在之前的文章<漫谈微服务>我已经简单的介绍过微服务,微服务特性是轻量级跨平台和跨语言的服务,也列举了比较了集中微服务通信的手段的利弊,本文将通过RPC通信的方式实现一个增删查Redi ...
- 使用 KVO 可能会拖慢启动速度
问题  在某一次启动速度优化中,发现最开始的某个 runLoop 中,一个runLoop 耗时很长.发现一个 KVO 变量的初始化消耗了13ms之久,这对启动速度是不可接受了. 源码分析 用 Ins ...
- React的状态管理工具
Mobx-React : 当前最适合React的状态管理工具 MobX 简单.可扩展的状态管理 MobX 是由 Mendix.Coinbase.Facebook 开源和众多个人赞助商 ...
- 使用 Jest 和 Supertest 进行接口端点测试
如何创建测试是一件困难的事.网络上有许多关于测试的文章,却从来不告诉你他们是如何开始创建测试的. 所以,今天我将分享我在实际工作中是如何从头开始创建测试的.希望能够对你提供一些灵感. 目录: 使用 E ...
- Lab_1:练习4——分析bootloader加载ELF格式的OS的过程
一.实验内容 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootloader&OS, bootloader如何读取硬盘扇 ...