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 each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
Jquery选择子控件&quot;大于号&quot;和&quot; &quot;区别介绍及使用示例
Jun 25 Javascript
javascript实现按回车键切换焦点
Feb 09 Javascript
Js实现自定义右键行为
Mar 26 Javascript
JS+CSS实现电子商务网站导航模板效果代码
Sep 10 Javascript
JS实现的竖向折叠菜单代码
Oct 21 Javascript
如何提高javascript加载速度
Dec 26 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
May 20 jQuery
React Native 环境搭建的教程
Aug 19 Javascript
原生JS实现列表子元素顺序反转的方法分析
Jul 02 Javascript
详解如何快速配置webpack多入口脚手架
Dec 28 Javascript
vue项目添加多页面配置的步骤详解
May 22 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 Curl出现403错误的解决办法
2014/05/29 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
基于vue2.0实现的级联选择器
2017/06/09 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
Python解惑之整数比较详解
2017/04/24 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
python enumerate函数的使用方法总结
2017/11/15 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
python支持多线程的爬虫实例
2019/12/21 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
什么是Python包的循环导入
2020/09/08 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
销售简历自我评价
2014/01/24 职场文书
中文专业学生自我评价范文
2014/02/06 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
请假条的格式
2014/04/11 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
企业年检委托书范本
2014/10/14 职场文书
民主评议党员工作总结
2014/10/20 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
小学思想品德教学反思
2016/02/24 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python