原生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 相关文章推荐
网站上面有这种切换效果
Jun 26 Javascript
静态页面的值传递(三部曲)
Sep 25 Javascript
无语,javascript居然支持中文(unicode)编程!
Apr 12 Javascript
js单向链表的具体实现实例
Jun 21 Javascript
JavaScript验证Email(3种方法)
Sep 21 Javascript
基于jQuery实现美观且实用的倒计时实例代码
Dec 30 Javascript
JS简单循环遍历json数组的方法
Apr 22 Javascript
jQuery EasyUI提交表单验证
Jul 19 Javascript
jquery Banner轮播选项卡
Dec 26 Javascript
jQuery Validate插件ajax方式验证输入值的实例
Dec 21 jQuery
Javascript将图片的绝对路径转换为base64编码的方法
Jan 11 Javascript
js实现三角形粒子运动
Sep 22 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
聊天室php&amp;mysql(六)
2006/10/09 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
javascript放大镜效果的简单实现
2013/12/09 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
使用python存储网页上的图片实例
2018/05/22 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
python异步Web框架sanic的实现
2020/04/27 Python
Python生成器generator原理及用法解析
2020/07/20 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
高中生家长会演讲稿
2014/01/14 职场文书
就业协议书的作用
2014/04/11 职场文书
经典导游欢迎词
2015/01/26 职场文书
介绍长城的导游词
2015/01/30 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书