原生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的倒计时插件代码
May 07 Javascript
jquery Moblie入门—hello world的示例代码学习
Jan 08 Javascript
jquery select多选框的左右移动 具体实现代码
Jul 03 Javascript
JavaScript?Apple设备检测示例代码
Nov 15 Javascript
酷炫jQuery全屏3D焦点图动画效果
Mar 22 Javascript
AngularJs 指令详解及示例代码
Sep 01 Javascript
AngularJs表单校验功能实例代码
Feb 09 Javascript
vue.js+Echarts开发图表放大缩小功能实例
Jun 09 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
Jul 12 Javascript
angularJs中json数据转换与本地存储的实例
Oct 08 Javascript
深入理解JavaScript的值传递和引用传递
Oct 24 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
Apr 28 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多用户计数器代码
2007/03/11 PHP
关于在php.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
loading动画特效小结
2017/01/22 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
高效使用Python字典的清单
2018/04/04 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
关于赌博的检讨书
2014/01/08 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
企业员工辞职信范文
2015/05/12 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
Python面向对象之内置函数相关知识总结
2021/06/24 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python