1. 程式人生 > 程式設計 >html+vue.js 實現漂亮分頁功能可相容IE

html+vue.js 實現漂亮分頁功能可相容IE

當功能比較簡單,在單一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">&lt;</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">&gt;</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>
 跳至&nbsp;
  <form id="frm1">
   <input type="text" v-model="goToPage" style="text-align: center;">
  </form>
 &nbsp;頁&nbsp;
 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 分頁內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!