原生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 相关文章推荐
点击广告后才能获得下载地址
Oct 26 Javascript
网页禁用右键实现代码(JavaScript代码)
Oct 29 Javascript
JavaScript面向对象之Prototypes和继承
Jul 12 Javascript
jQuery修改CSS伪元素属性的方法
Jul 30 Javascript
javascript获取dom的下一个节点方法
Sep 05 Javascript
jQuery的事件委托实例分析
Jul 15 Javascript
详解javascript实现瀑布流列式布局
Jan 29 Javascript
利用js获取下拉框中所选的值
Dec 01 Javascript
Vue.js常用指令的使用小结
Jun 23 Javascript
JS+Ajax实现百度智能搜索框
Aug 04 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
Jul 06 Javascript
解决vant title-active-color与title-inactive-color不生效问题
Nov 03 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 socket的讲解与实例分析
2013/06/13 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
2016/11/18 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
vue实现计算器功能
2020/02/22 Javascript
JS写滑稽笑脸运动效果
2020/05/28 Javascript
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
Python 除法小技巧
2008/09/06 Python
Python3基础之输入和输出实例分析
2014/08/18 Python
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
Pytorch转tflite方式
2020/05/25 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
“学雷锋活动月”总结
2014/03/09 职场文书
安全生产专项整治方案
2014/05/06 职场文书
2014年内勤工作总结
2014/11/24 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript