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 源码分析笔记(2) 变量列表
May 28 Javascript
浅谈Javascript事件处理程序的几种方式
Jun 27 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
Apr 21 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
Jul 10 Javascript
js加入收藏以及使用Jquery更改透明度
Jan 26 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
Mar 03 Javascript
微信小程序 require机制详解及实例代码
Dec 14 Javascript
angular使用post、get向后台传参的问题实例
May 27 Javascript
浅谈webpack4 图片处理汇总
Sep 12 Javascript
JS添加或删除HTML dom元素的方法实例分析
Mar 05 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
Aug 07 Javascript
ajax jquery实现页面某一个div的刷新效果
Mar 04 jQuery
解决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
php动态生成JavaScript代码
2009/03/09 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
php数据库备份还原类分享
2014/03/20 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
js 调整select 位置的函数
2008/02/21 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
jQuery+ajax实现文件上传功能
2020/12/22 jQuery
vuex的使用步骤
2021/01/06 Vue.js
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
python中dir函数用法分析
2015/04/17 Python
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
python实现用户登录系统
2016/05/21 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
python zip()函数使用方法解析
2019/10/31 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
森马旗舰店双十一营销方案
2014/09/29 职场文书
春秋淹城导游词
2015/02/11 职场文书
会计主管岗位职责
2015/04/02 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
感恩教师主题班会
2015/08/12 职场文书