原生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 AjaxQueue改进步骤
Oct 06 Javascript
jQuery中读取json文件示例代码
May 10 Javascript
js入门之Function函数的使用方法【新手必看】
Nov 22 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
Feb 14 Javascript
微信小程序 基础组件与导航组件详细介绍
Feb 21 Javascript
JS判断微信扫码的方法
Aug 07 Javascript
web前端vue filter 过滤器
Jan 12 Javascript
微信小程序三级联动选择器使用方法
May 19 Javascript
vue 利用路由守卫判断是否登录的方法
Sep 29 Javascript
微信小程序与webview交互实现支付功能
Jun 07 Javascript
layer扩展打开/关闭动画的方法
Sep 23 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
Nov 09 jQuery
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转换文本框内容为HTML格式的方法
2016/07/20 PHP
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
python中range()与xrange()用法分析
2016/09/21 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
python 获取图片分辨率的方法
2019/01/08 Python
django url到views参数传递的实例
2019/07/19 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
pyspark 随机森林的实现
2020/04/24 Python
Python使用jpype模块调用jar包过程解析
2020/07/29 Python
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
团购业务员岗位职责
2014/03/15 职场文书
寒假家长评语大全
2014/04/16 职场文书
化工专业求职信
2014/07/01 职场文书
作文评语怎么写
2014/12/25 职场文书
水电工岗位职责
2015/02/14 职场文书
小学工作总结2015
2015/05/04 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
高中化学教学反思
2016/02/22 职场文书