2020-11-07

html+vue.js 实现分页可兼容IE

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

先看一下实现效果:

上代码:

1.简单搞一搞 CSS,此处代码有折叠
	[v-cloak] {		display: none;	}	#app {		text-align: center;		padding-top: 300px;    height:500px;	}	.pageContainer {		width: 800px;		margin: 100px auto;		text-align: center;		font-size: 14px;		color: #A3A3A3;	}	.pageContainer ul.pagesInner {		height: 30px;		line-height: 30px;		display: inline-block;    padding: 0;	}	.pageContainer ul.pagesInner li {		width: 30px;		height: 30px;		display: inline-block;		border: 1px solid #E5E5E5;		margin: 0 5px;    list-style: none;	}	.pageContainer ul.pagesInner li.actived {		background: #FF6200;		color: #ffffff;	}	.pageContainer .page-size-box {		position: relative;		display: inline-block;		width: 70px;		border: 1px solid #E5E5E5;		height: 30px; 		line-height: 30px;	}	.pageContainer ul.size-option {		display: inline-block;		border: 1px solid #E5E5E5;		position: absolute;		margin: 0;		padding: 0;		left: 0;		top: -120px;		background: #ffffff;	}	.pageContainer ul.size-option li{		list-style: none;		width: 70px;	}	.pageContainer ul.size-option li:hover{		color: #FF6200;	}	.pageContainer form {		display: inline-block;	}	.pageContainer form input,	.pageContainer button {		outline: none;		padding: 0;		width: 46px;		height: 30px;		background: #ffffff;		border: 1px solid #E5E5E5;		color: #A3A3A3;	}

2.简单搞一搞 HTML

<div id="app" v-cloak @click="showOption=false"> 第{{pageIndex}}页, 每页显示{{pageSize}}条 <div v-show="pageTotalNum > 1" >  共{{dataListLength}}条 <ul >  <li @click="prevOrNext(-1)"><span aria-hidden="true">&lt;</span></li>  <li v-for="(item, index) in pages" :key="index" : @click="selectPage(item)">  <span>{{item}}</span>  </li>  <li @click="prevOrNext(1)"><span aria-hidden="true">&gt;</span></li> </ul> <div >  <span @click.stop="showOption=!showOption">{{pageSize}}条/页</span>  <ul v-show="showOption">  <li v-for="(item, index) in pageSizeList" :key="index" @click="pageSize=item;showOption=false">{{item}}条/页</li>  </ul> </div> 跳至&nbsp;  <form id="frm1">   <input type="text" v-model="goToPage" >  </form> &nbsp;页&nbsp; button @click="handleGoToPage">确定</button> </div></div>

3.搞事情啦 ~~~~

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

  • 首页和尾页始终显示,

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

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

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

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

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

<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>

原文转载:http://www.shaoqun.com/a/489411.html

epa认证:https://www.ikjzd.com/w/1769

亚马逊全球开店:https://www.ikjzd.com/w/1299

i号店:https://www.ikjzd.com/w/2263


当功能比较简单,在单一html中使用vue.js分页展示数据,并未安装脚手架,或使用相关UI框架,此时需要手写一个分页器,不失为最合理最便捷的解决方案,先看一下实现效果:上代码:1.简单搞一搞CSS,此处代码有折叠 [v-cloak]{ display:none; } #app{ text-align:center; padding-top:300px;height:500px; } .pa
3suisses:https://www.ikjzd.com/w/412
亚马逊礼品卡:https://www.ikjzd.com/w/1090.html
中山南粤石文化博览园门票多少呢?:http://tour.shaoqun.com/a/1634.html
漫步博物馆寻味陈列的文明记忆 :http://tour.shaoqun.com/a/10508.html
亚马逊印度站如何?印度站入驻条件、流程、费用及常见问题!:https://www.ikjzd.com/home/14413

No comments:

Post a Comment