原生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创建对象的几种常用方式小结(推荐)
Oct 24 Javascript
javascript中hasOwnProperty() 方法使用指南
Mar 09 Javascript
jQuery实现表格颜色交替显示的方法
Mar 09 Javascript
javascript实现简单的页面右下角提示信息框
Jul 31 Javascript
js实现当前输入框高亮显示的方法
Aug 19 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
Jun 21 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
Jun 08 Javascript
Javascript实现时间倒计时效果
Jul 15 Javascript
ES6 Symbol数据类型的应用实例分析
Jun 26 Javascript
Vue实现拖放排序功能的实例代码
Jul 08 Javascript
深度解读vue-resize的具体用法
Jul 08 Javascript
何时/使用 Vue3 render 函数的教程详解
Jul 25 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一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
node.js中的console.assert方法使用说明
2014/12/10 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
酒店管理专业学生求职信
2013/09/27 职场文书
办公室副主任岗位职责
2013/11/25 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
三好学生评语大全
2014/12/29 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
节约用电通知
2015/04/25 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
Python Flask实现进度条
2022/05/11 Python