原生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 相关文章推荐
JQuery UI皮肤定制
Jul 27 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
Jun 29 Javascript
用js代码改变单选框选中状态的简单实例
Dec 18 Javascript
AngularJS数据源的多种获取方式汇总
Feb 02 Javascript
详解Backbone.js框架中的模型Model与其集合collection
May 05 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
Sep 01 Javascript
js继承实现方法详解
Dec 16 Javascript
详解Angular调试技巧之报错404(not found)
Jan 31 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
Apr 18 jQuery
微信小程序之左右布局的实现代码
Dec 13 Javascript
深入浅析JavaScript中的in关键字和for-in循环
Apr 20 Javascript
vue项目中openlayers绘制行政区划
Dec 24 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
PHP 和 MySQL 基础教程(一)
2006/10/09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
PHP引用的调用方法分析
2016/04/25 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
js表头排序实现方法
2015/01/16 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Tesserocr库的正确安装方式
2018/10/19 Python
python numpy 反转 reverse示例
2019/12/04 Python
Python pip使用超时问题解决方案
2020/08/03 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
焊接专业毕业生求职信
2013/10/01 职场文书
医学生求职自荐信
2013/10/25 职场文书
回门宴答谢词
2014/01/13 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
六一亲子活动总结
2014/07/01 职场文书
国际商务专业求职信
2014/07/15 职场文书
公路施工安全责任书
2015/05/08 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python