原生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 相关文章推荐
Google Map Api和GOOGLE Search Api整合实现代码
Jul 18 Javascript
AngularJS学习笔记之基本指令(init、repeat)
Jun 16 Javascript
详解JavaScript逻辑Not运算符
Dec 04 Javascript
原生JavaScript编写canvas版的连连看游戏
May 29 Javascript
js倒计时小实例(多次定时)
Dec 08 Javascript
JavaScript实现汉字转换为拼音的库文件示例
Dec 22 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
Mar 25 jQuery
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
Oct 25 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
Apr 24 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
Sep 11 Javascript
JS实现网页端猜数字小游戏
Mar 06 Javascript
jQuery实现日历效果
Sep 11 jQuery
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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
Javascript中Eval函数的使用说明
2008/10/11 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
python的类方法和静态方法
2014/12/13 Python
Python全局变量用法实例分析
2016/07/19 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
python中threading开启关闭线程操作
2020/05/02 Python
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
介绍一下linux的文件权限
2012/02/15 面试题
文明餐桌活动方案
2014/02/11 职场文书
超越自我演讲稿
2014/05/21 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
免职通知
2015/04/23 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers
Python简易开发之制作计算器
2022/04/28 Python