原生JS实现分页


Posted in Javascript onApril 19, 2022

这个只是一个分页的demo,主要是思路整理(很久之前项目用的东西)

分页实现的效果 主要是 左侧上一页 右侧是下一页 中间显示主要是超过5个显示 省略号 然后是可配置选项

实现之后的效果

原生JS实现分页

首先需要初始化该对象的一些基本属性,显示总页码数,中间显示的页面数, 添加一个回调函数,在页面变化激活回调函数并返回当前页面和一些需要的其他参数 init为对象初始化的方法(里面的参数都是可以写成活的,我这里偷懒了所以写成死的了) 这个里的 z_page 可以接是接口返回的总页数

function Page(obj) {
     this.obj = obj||{page:1,page_count: 0};
     this.z_page = 7;    // 一共显示的页码数
     this.show_page = this.z_page-2; // 中间显示多少个页码  必须是个基数好看
     this.fn = this.obj.block;
     this.init()
 }

在init在初始化方法里主要是判断

1 总页数是否小于显示页面(这个主要是判断是否显示省略号,添加省略号比较麻烦,这个是总页数少不用添加)

2 当前页面数+左右显示的平均数(show_page/2-1)+1和总页面相比 这个主要判断省略号在前面的问题(靠近尾页)前面有省略号

原生JS实现分页

3 左右显示的平均数(show_page/2-1)+2(最前面1 和最后的书)大于当前页面数(靠近首页)

第一个图片(后面有省略号)

4 剩下的状态就是中间状态(两侧有省略号)

原生JS实现分页

这个判断其实也是要判断咱们分页的边界条件,如果这个想好了并且实现了 相当于就完成了一半 初始化方法的最后是要给上一页和下一页,有数字的页签 添加点击事件 并且做相应逻辑处理 代码的实现

Page.prototype.create = function () {
     // page:1 page_count 17
     // 保证被点击的页数在中间
     var ping = (this.show_page-1)/2; // 左右显示的平均数  在中间
     var num = this.obj.page-ping; // 最小页码
     var endnum =  (this.obj.page+ping)>this.obj.page_count?this.obj.page_count:(this.obj.page+ping) // 最大页码
     console.log(endnum);
     var pageID = document.getElementById('pageID');
     var self= this;
     pageID.innerHTML = '';
     num = num<1?1:num;
     if (this.obj.page_count<= this.z_page) {
         alert('smallPage');
         this.smallPage()
     } else if( (this.obj.page+ping+1)>=this.obj.page_count) {// 还要加上最后一个   接近尾页
         pageID.appendChild(this.nearBack())
         console.log('尾巴')

     } else if ((ping+2)>=(this.obj.page)) {  //3   接近首页
         pageID.appendChild( this.nearHome())
         console.log('临近首页')
     }else {
         console.log(num,endnum);
         pageID.appendChild(this.centerPage(num,endnum));
     }
     document.onclick = function (event) {
         switch (event.target.className) {
             case 'previous':
                 self._previous();
                 break;
             case 'next':
                 self._next();
                 break;
             default:
                 self.clickLi(event.target);
         }
         self.fn(self.obj.page)
     }
 };

剩下的就是只想逻辑和dom操作了 因为是用的原生js,这里是用的文档碎片,把我生成的dom全部都放到文档碎片里,然后一次性返出来 直接append到body上 这个是我的方法代码

Page.prototype.nearBack = function () {
     var oFragmeng = document.createDocumentFragment(); // 创建了一个文档碎片
     var ul = document.createElement('ul')
     var Div = oFragmeng.appendChild(ul);
      Div.innerHTML = '<li>1</li><li>....</li>';
     for (var m=(this.obj.page_count- this.show_page);m<=this.obj.page_count;m++) {
         var li1 = document.createElement('li');
         li1.innerHTML = m;
         if (m===this.obj.page) {
             li1.className = 'active'
         }
         Div.appendChild(li1)
     }
    return oFragmeng.firstChild;
 };

总结:分页 也会和你实现的分页效果不同,实现方式也有区别,但是核心思想是一样的。 

到此这篇关于基于原生JS实现分页效果的示例代码的文章就介绍到这了!

Javascript 相关文章推荐
用apply让javascript函数仅执行一次的代码
Jun 27 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
Dec 15 Javascript
jquery 无限级联菜单案例分享
Mar 26 Javascript
Yii2使用Bootbox插件实现自定义弹窗
Apr 02 Javascript
JS实现超简单的汉字转拼音功能示例
Dec 22 Javascript
JS 调试中常见的报错问题解决方法
May 20 Javascript
为输入框加入数字js校验代码分享
Nov 02 Javascript
Angular实现下拉框模糊查询功能示例
Jan 03 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
Dec 09 Javascript
JavaScrip数组去重操作实例小结
Jun 20 Javascript
JS立即执行的匿名函数用法分析
Nov 04 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
Oct 30 Javascript
Javascript webpack动态import
微信小程序APP页面的之间的相互传递参数以及自定义组件
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
微信小程序APP的生命周期及页面的生命周期
解决vue中provide inject的响应式监听
Apr 19 #Vue.js
vue3种table表格选项个数的控制方法
Apr 14 #Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 #Vue.js
You might like
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
深入了解php4(1)--回到未来
2006/10/09 PHP
source.php查看源文件
2006/12/09 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
JS实现动态无缝轮播
2020/01/11 Javascript
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
自我鉴定200字
2013/10/28 职场文书
详解java如何集成swagger组件
2021/06/21 Java/Android
java设计模式--建造者模式详解
2021/07/21 Java/Android
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
JavaScript实现栈结构详细过程
2021/12/06 Javascript
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS