原生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 相关文章推荐
MyEclipse取消验证Js的两种方法
Nov 14 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
Apr 16 Javascript
纯javascript判断查询日期是否为有效日期
Aug 24 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
Jun 22 Javascript
AngularJS 执行流程详细介绍
Aug 18 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
Dec 11 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
Oct 26 Javascript
JS运动改变单物体透明度的方法分析
Jan 23 Javascript
jQuery阻止事件冒泡实例分析
Jul 03 jQuery
自定义javascript验证框架示例【附源码下载】
May 31 Javascript
浅谈如何优雅处理JavaScript异步错误
Nov 12 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
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
微信扫描二维码登录网站代码示例
2013/12/30 PHP
php微信开发之谷歌测距
2018/06/14 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
js一组验证函数
2008/12/20 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
angular5 httpclient的示例实战
2018/03/12 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
python实现验证码识别功能
2018/06/07 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
法国房车租赁网站:Yescapa
2019/08/26 全球购物
中学生团员自我评价分享
2013/12/07 职场文书
社区党员先进事迹
2014/01/22 职场文书
学生会宣传部部长竞选演讲稿
2014/04/25 职场文书
公司任命书模板
2014/06/06 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
关于工作经历的证明书
2014/10/11 职场文书
幼师求职自荐信
2015/03/26 职场文书
2015年助残日活动总结
2015/03/27 职场文书
民间借贷被告代理词
2015/05/23 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
Elasticsearch 配置详解
2022/04/19 Java/Android
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python