原生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 相关文章推荐
JS与C#编码解码
Dec 03 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
May 08 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
May 17 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
Sep 15 Javascript
浅谈JS函数定义方式的区别
Oct 30 Javascript
gulp解决跨域的配置文件问题
Jun 08 Javascript
react学习笔记之state以及setState的使用
Dec 07 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
Nov 02 Javascript
微信小程序图片自适应实现解析
Jan 21 Javascript
微信小程序利用for循环解决内容变更问题
Mar 05 Javascript
Bootstrap table 服务器端分页功能实现方法示例
Jun 01 Javascript
Vue路由切换页面不更新问题解决方案
Jul 10 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
在普通HTTP上安全地传输密码
2007/07/21 PHP
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
PHP修改session_id示例代码
2014/01/08 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
从零学习node.js之模块规范(一)
2017/02/21 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
Vue.js构建你的第一个包并在NPM上发布的方法步骤
2019/05/01 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
小学体育教学反思
2014/01/31 职场文书
服务标语大全
2014/06/18 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
2014年行政工作总结
2014/11/19 职场文书
小学见习报告
2015/06/23 职场文书
导游词之崇武古城
2019/10/07 职场文书
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS