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 相关文章推荐
google地图的路线实现代码
Aug 20 Javascript
jquery控制listbox中项的移动并排序
Nov 12 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
May 11 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 Javascript
javascript自适应宽度的瀑布流实现思路
Feb 20 Javascript
jQuery焦点图切换特效插件封装实例
Aug 18 Javascript
JavaScript中字符串拼接的基本方法
Jul 07 Javascript
Bootstrap显示与隐藏简单实现代码
Mar 06 Javascript
VueJs组件prop验证简单介绍
Sep 12 Javascript
node.js部署之启动后台运行forever的方法
May 23 Javascript
手动下载Chrome并解决puppeteer无法使用问题
Nov 12 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
Sep 05 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
php whois查询API制作方法
2011/06/23 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
PHP仿微信发红包领红包效果
2016/10/30 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
php实例化一个类的具体方法
2019/09/19 PHP
js活用事件触发对象动作
2008/08/10 Javascript
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
Vue组件开发初探
2017/02/14 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
Python代码实现KNN算法
2017/12/20 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
华为python面试题
2016/05/03 面试题
巧克力蛋糕店创业计划书
2014/01/14 职场文书
土木工程师职业规划范文
2014/03/07 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
公益广告标语
2014/06/19 职场文书
办公经费申请报告
2015/05/15 职场文书
教师师德工作总结2015
2015/07/22 职场文书
《英雄联盟》2022日蚀、月蚀皮肤演示 黑潮亚索曝光
2022/04/13 其他游戏