原生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 相关文章推荐
javascript延时重复执行函数 lLoopRun.js
Jun 29 Javascript
用Javascript同时提交多个Web表单的方法
Dec 26 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
Mar 19 Javascript
动态显示可输入的字数提示还可以输入的字数
Apr 01 Javascript
浅谈javascript中的call、apply、bind
Mar 06 Javascript
jQuery validate验证插件使用详解
May 11 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
js实现移动端轮播图效果
Dec 09 Javascript
微信小程序实现一张或多张图片上传(云开发)
Sep 25 Javascript
vue-router路由懒加载及实现的3种方式
Feb 28 Vue.js
Javascript中的解构赋值语法详解
Apr 02 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配置文件中最常用四个ini函数
2007/03/19 PHP
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
js select option对象小结
2013/12/20 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
JS typeof fn === 'function' &amp;&amp; fn()详解
2020/08/22 Javascript
python检测lvs real server状态
2014/01/22 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
对Python3+gdal 读取tiff格式数据的实例讲解
2018/12/04 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
医学院护理专业应届生求职信
2013/11/12 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
2014年个人业务工作总结
2014/11/17 职场文书