最近项目需要用到很简单的vue移动端分页组件,网上找了找,没有特别适合的,根据网上找来的代码,自己写了个简单的分页 根据设计稿,想要的就是最简单的,上一页,下一页,中间
最近项目需要用到很简单的vue移动端分页组件,网上找了找,没有特别适合的,根据网上找来的代码,自己写了个简单的分页
根据设计稿,想要的就是最简单的,上一页,下一页,中间固定放三个显示页数的,不需要显示很多,也不需要省略号
原博客:https://blog.csdn.net/freya_yyy/article/details/81227016
效果图如下:


代码如下:
pagination.vue
<template>
<div class="pagination">
<ul>
<li v-if="currentPage > 1">
<span @click="prevPage">上一页</span>
</li>
<li v-if="currentPage == 1">
<span class="disabled">上一页</span>
</li>
<li v-for="item in indexs" v-bind:class="{‘active‘:currentPage==item}" class="item">
<span @click="btnClick(item)">{{item}}</span>
</li>
<li v-if="currentPage!=allPage">
<span @click="nextPage">下一页</span>
</li>
<li v-if="currentPage==allPage">
<span class="disabled">下一页</span>
</li>
<li><span>共<i>{{allPage}}</i>页</span></li>
</ul>
</div>
</template>
<script>
export default {
name: ‘pagination‘,
props: {
currentPage: { // 当前第几页
type: Number,
default: 1
},
allPage: { // 总页数
type: Number,
default: 5
},
showIndex: { // 中间显示几个页数,要为奇数
type: Number,
default: 3
}
},
methods: {
nextPage () {
this.$emit(‘setPage‘, this.currentPage + 1)
},
prevPage () {
this.$emit(‘setPage‘, this.currentPage - 1)
},
btnClick (num) {
if (num !== this.currentPage) {
this.$emit(‘setPage‘, num)
}
}
},
computed: {
indexs () {
var left = 1
var right = this.allPage
var arr = []
var index = parseInt(this.showIndex / 2)
var middleIndex = index + 1
if (this.allPage >= this.showIndex) {
if (this.currentPage > middleIndex && this.currentPage < this.allPage - index) {
left = this.currentPage - index
right = this.currentPage + index
} else if (this.currentPage <= middleIndex) {
left = 1
right = this.showIndex
} else {
left = this.allPage - (this.showIndex - 1)
right = this.allPage
}
}
while (left <= right) {
arr.push(left)
left++
}
return arr
}
}
}
</script>
<style scoped lang="less">
.pagination{
ul{
display: flex;
justify-content: center;
align-items: center;
font-size: .24rem;
li{
height: .6rem;
margin: .12rem;
span{
display: block;
padding: 0 .12rem;
height: 100%;
text-align: center;
line-height: .6rem;
color: #E0224F;
border: 1px solid #E0224F;
&.disabled{
color: #D8D8D8;
border: 1px solid #D8D8D8;
}
}
&.item{
min-width: .6rem;
span{
padding: 0;
color: #413134;
border: 1px solid #fff;
}
&.active{
span{
color: #E0224F;
border: 1px solid #E0224F;
}
}
}
}
}
}
</style>
使用:
<template>
<pagination :allPage="10" @setPage="setPage" :currentPage="currentPage" :showIndex="3"></pagination>
</template>
<script>
import pagination from ‘@/components/pagination‘
export default {
data () {
return {
currentPage: 1,
}
},
method: {
setPage (page) {
this.currentPage = page
console.log(this.currentPage)
}
}
}
</script>
