原生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 判断checkbox是否选中的实现代码
Nov 23 Javascript
非常有用的40款jQuery 插件推荐(系列二)
Dec 25 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
Jun 24 Javascript
JS+Canvas绘制时钟效果
Aug 20 Javascript
详解Angular调试技巧之报错404(not found)
Jan 31 Javascript
详解微信小程序的 request 封装示例
Aug 21 Javascript
vue多次循环操作示例
Feb 08 Javascript
深入理解vue-class-component源码阅读
Feb 18 Javascript
vue实现绑定事件的方法实例代码详解
Jun 20 Javascript
js实现页面多个日期时间倒计时效果
Jun 20 Javascript
jquery实现简单每周轮换的日历
Sep 10 jQuery
vue实现表格合并功能
Dec 01 Vue.js
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
967 个函式
2006/10/09 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
js中let能否完全替代IIFE
2019/06/15 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
Python创建日历实例
2014/08/21 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
没编程基础可以学python吗
2020/06/17 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
父母对孩子说的话
2014/04/12 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
神龙架导游词
2015/02/11 职场文书
尊师重教主题班会
2015/08/14 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript
警用民用对讲机找不同
2022/02/18 无线电
MySQL数据库事务的四大特性
2022/04/20 MySQL