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 笔记 事件
Nov 02 Javascript
详解js闭包
Sep 02 Javascript
实例分析js和C#中使用正则表达式匹配a标签
Nov 26 Javascript
JavaScript实现在标题栏上显示当前日期的方法
Mar 19 Javascript
3个可以改善用户体验的AngularJS指令介绍
Jun 18 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
Mar 09 Javascript
BootStrap文件上传样式超好看【持续更新】
May 10 Javascript
JS简单实现禁止访问某个页面的方法
Sep 13 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
Jun 25 Javascript
微信小程序商品详情页的底部弹出框效果
Nov 16 Javascript
小程序实现短信登录倒计时
Jul 12 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 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
PHP5 面向对象程序设计
2008/02/13 PHP
php 静态页面中显示动态内容
2009/08/14 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
mouse_on_title.js
2006/08/25 Javascript
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
js表数据排序 sort table data
2009/02/18 Javascript
jquery 可排列的表实现代码
2009/11/13 Javascript
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
python发送邮件接收邮件示例分享
2014/01/21 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
详解Python 循环嵌套
2020/07/09 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
工程预算与管理应届生求职信
2013/10/06 职场文书
党员批评与自我批评
2014/02/12 职场文书
奥利奥广告词
2014/03/20 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
简单租房协议书
2014/10/21 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书