原生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 相关文章推荐
一段利用WSH获取登录时间的jscript代码
May 11 Javascript
获取URL地址中的文件名和参数的javascript代码
Sep 02 Javascript
JavaScript iframe的相互操作浅析
Oct 14 Javascript
Js获取事件对象代码
Aug 05 Javascript
js二级地域选择的实现方法
Jun 17 Javascript
JS计算网页停留时间代码
Apr 28 Javascript
jQuery实现平滑滚动到指定锚点的方法
Mar 20 Javascript
AngularJs ng-route路由详解及实例代码
Sep 14 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
Oct 13 Javascript
Vue父子组件双向绑定传值的实现方法
Jul 31 Javascript
json解析大全 双引号、键值对不在一起的情况
Dec 06 Javascript
原生js实现的观察者和订阅者模式简单示例
Apr 18 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
信用卡效验程序
2006/10/09 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
微信小程序实现星级评分和展示
2018/07/05 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
使用python实现baidu hi自动登录的代码
2013/02/10 Python
python字符串编码识别模块chardet简单应用
2015/06/15 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
python字典改变value值方法总结
2019/06/21 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
linux面试题参考答案(8)
2016/04/19 面试题
护理职业生涯规划书
2014/01/24 职场文书
测量工程专业求职信
2014/02/24 职场文书
大学生村官考核材料
2014/05/23 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
作风建设年度心得体会
2014/10/29 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python
Python超详细分步解析随机漫步
2022/03/17 Python