html+vue.js 实现漂亮分页功能可兼容IE


Posted in Javascript onNovember 07, 2020

当功能比较简单,在单一html中使用vue.js分页展示数据,并未安装脚手架,或使用相关UI框架,此时需要手写一个分页器,不失为最合理最便捷的解决方案

先看一下实现效果:

 html+vue.js 实现漂亮分页功能可兼容IE

 上代码:

1.简单搞一搞 CSS,此处代码有折叠
2.简单搞一搞 HTML 

<div id="app" v-cloak @click="showOption=false">
 第{{pageIndex}}页, 每页显示{{pageSize}}条
 <div v-show="pageTotalNum > 1" class="pageContainer">
  共{{dataListLength}}条
 <ul class="pagesInner">
  <li class="page" @click="prevOrNext(-1)"><span aria-hidden="true"><</span></li>
  <li class="page" v-for="(item, index) in pages" :key="index" :class="{actived: item == pageIndex}" @click="selectPage(item)">
  <span>{{item}}</span>
  </li>
  <li class="page" @click="prevOrNext(1)"><span class="fa fa-chevron-right" aria-hidden="true">></span></li>
 </ul>
 <div class="page-size-box">
  <span @click.stop="showOption=!showOption">{{pageSize}}条/页</span>
  <ul class="size-option" v-show="showOption">
  <li v-for="(item, index) in pageSizeList" :key="index" @click="pageSize=item;showOption=false">{{item}}条/页</li>
  </ul>
 </div>
 跳至 
  <form id="frm1">
   <input type="text" v-model="goToPage" style="text-align: center;">
  </form>
  页 
 button @click="handleGoToPage">确定</button>
 </div>
</div>

 3.搞事情啦 ~~~~

首先分析一下分页功能的实现思路:

  • 首页和尾页始终显示,

  • 通过数据总条数dataListLength及每页显示条数pageSize,计算出总页数pageTotalNum

  • 监听watch一下,每页显示条数pageSize,重置当前页码pageIndex=1

  • 我设计的分页每次最多显示5个页码(大家可根据需求自行调整),剩余部分 ... 代替,并设置不可点击,

  • 根据不同的总页数和当前页码的切换,页签展示形态有所不同,展示形态如下图对应序号展示

总页数 <= 1,不显示分页器
总页数 <= 5 && 总页数 > 1,显示全部页码
总页数 > 5 && 当前页面 <= 3 , 倒数第二个页码为...,页码从左往右计算
总页数 > 5 && 当前页面 > 3 && 当前页 < 总页数 - 3 , 正倒数第二个页码都为..., 页码以当前页码计算,±1
总页数 > 5 && 当前页面 > 3 && 当前页 > 总页数 - 3 , 正数第二个页码为..., 页码从右往左计算

html+vue.js 实现漂亮分页功能可兼容IE

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script> 	<!--兼容IE -->
<script>
 var app = new Vue({
 el: "#app",
 data: {
  pageIndex: 1,
  goToPage: '',
  // pageTotalNum: 16,
  dataListLength:147,
  pageSize:20,
  pageSizeList:[20,30,50,100],
  showOption:false
 },
 methods: {
  prevOrNext: function(n) {
  this.pageIndex += n
  this.pageIndex <= 1 ? this.pageIndex = 1 : this.pageIndex > this.pageTotalNum ? this.pageIndex = this.pageTotalNum : null
  },
  selectPage: function(n) {
  if (n === this.pageIndex) return
  if (typeof n === 'string') return
  this.pageIndex = n
  },
  handleGoToPage: function() {
  this.pageIndex = this.goToPage <= 1 ? 1 : this.goToPage - 0 >= this.pageTotalNum - 0 ? this.pageTotalNum :
  this.goToPage
  this.goToPage = this.pageIndex
  },
 },
 computed: {
  pageTotalNum:function(){
  return this.dataListLength % this.pageSize == 0 ? this.dataListLength / this.pageSize : Math.floor(this.dataListLength / this.pageSize) + 1
  },
  pages: function () {
  // 每次最多显示5个页码
  var c = this.pageIndex
  var t = this.pageTotalNum
  var p = []
  for (var i = 1; i <= t; i++) {
   p.push(i)
  }
  var l = p.length
  if (l <= 5) { // 总页数<=5,显示全部页码
   return p
  } else if (l > 5 && c <= 3) { // 总页数>5 && 当前页面<=3
   return [1, 2, 3, 4, '...', t] 
  } else if (l > 5 && c > 3 && c <= l - 2) { // 总页数 > 5 && 当前页面 > 3 && 当前页 < 总页数 - 3
   return [1, '...', c - 2, c - 1, c, '...', t] 
  } else { // 总页数 > 5 && 当前页面 > 3 && 当前页 > 总页数 - 3
   return [1, '...', t - 3, t - 2, t - 1, t] 
  }
  },
 },
 watch:{
  pageSize:function(nv,ov){
  this.pageIndex = 1
  }
 }
 });
</script>

到此这篇关于html+vue.js 实现漂亮分页功能可兼容IE的文章就介绍到这了,更多相关vue.js 分页内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
Mar 03 Javascript
使用JS 清空File控件的路径值
Jul 08 Javascript
容易造成JavaScript内存泄露几个方面
Sep 04 Javascript
浅析JS获取url中的参数实例代码
Jun 14 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
Aug 05 Javascript
bootstrap table分页模板和获取表中的ID方法
Jan 10 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
May 17 Javascript
利用JavaScript的%做隔行换色的实例
Nov 25 Javascript
vuex的使用及持久化state的方式详解
Jan 23 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
Sep 04 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
Sep 27 Javascript
JS + HTML 罗盘式时钟的实现
May 21 Javascript
解决vue watch数据的方法被调用了两次的问题
Nov 07 #Javascript
vue 避免变量赋值后双向绑定的操作
Nov 07 #Javascript
浅谈Vue static 静态资源路径 和 style问题
Nov 07 #Javascript
解决VueCil代理本地proxytable无效报错404的问题
Nov 07 #Javascript
Nuxt 项目性能优化调研分析
Nov 07 #Javascript
js实现日历
Nov 07 #Javascript
工作中常用js功能汇总
Nov 07 #Javascript
You might like
基于mysql的bbs设计(二)
2006/10/09 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
21行Python代码实现拼写检查器
2016/01/25 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
python requests使用socks5的例子
2019/07/25 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Django 解决由save方法引发的错误
2020/05/21 Python
numba提升python运行速度的实例方法
2021/01/25 Python
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
园艺师求职信
2014/03/10 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
英语教师求职信
2014/06/16 职场文书
党支部综合考察意见
2015/06/01 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript
zabbix监控mysql的实例方法
2021/06/02 MySQL