开箱即用:基于Vue的分页器

## 在我们开发过程中都离不开分页器,手写一个分页器能更好的理解分页器的原理,需要知道三个数据,pageNo:当前页数,pageNum:每一页显示多少数(一般都为5或7页,为了美观!!),total:总页数,知道总页数和每一页显示多少页数,我们可以得出一共用多少页

## 代码如下:
<template>
<div>
  <div class="pagination">
    <button v-show="pageNo!=1" @click="$emit('getPageNo',pageNo-1)">上一页</button>
    <button
        v-show="startNumAndEndNum.start>1"
        @click="$emit('getPageNo',1)"
        :class="{active:pageNo==1}"
    >
      1
    </button>
    <button v-show="startNumAndEndNum.start>2">···</button>

    <button
        v-for="(page,index) in startNumAndEndNum.end"
        :key="index"
        v-if="page>=startNumAndEndNum.start"
        @click="$emit('getPageNo',page)"
        :class="{active:pageNo==page}"
    >{{page}}</button>
    <button v-show="startNumAndEndNum.end<totalPage-1">···</button>
    <button
        v-show="startNumAndEndNum.end<totalPage"
        @click="$emit('getPageNo',totalPage)"
        :class="{active:pageNo==totalPage}"
    >
      {{totalPage}}
    </button>
    <button v-show="pageNo!==totalPage" @click="$emit('getPageNo',pageNo+1)">下一页</button>
    <button style="margin-left: 30px">共 {{ total }} 条</button>
  </div>

</div>
</template>

<script>
export default {
name: "Pagination",
  props:['pageNo','pageSize','total','continue'],
  computed:{
  //总共多少页
    totalPage(){
      //Math.ceil()向上取整
      return Math.ceil(this.total/this.pageSize)
    },
    //连续页码的起始页码和结束页码,至少是5页
    startNumAndEndNum(){
     let start = 0 ,end = 0
      //当页码不足5页时
      if (this.continue>this.totalPage){
        start=1
        end=this.totalPage
        //正常现象,页码超过5页时
      }else {
        //Math.floor()向下取整
        start=this.pageNo-Math.floor(this.continue/2)
        end=this.pageNo+Math.floor(this.continue/2)
        if (start<1){
          start=1
          end=this.continue
        }
      if(end>this.totalPage){
        start=this.totalPage-this.continue+1
        end=this.totalPage
      }
      }
      return {start,end}
    }
  }
}
</script>

<style scoped lang="less">
.pagination {
  text-align: center;
button {
  margin: 0 5px;
  background-color: #f4f4f5;
  color: #606266;
  outline: none;
  border-radius: 2px;
  padding: 0 4px;
  vertical-align: top;
  display: inline-block;
  font-size: 13px;
  min-width: 35.5px;
  height: 28px;
  line-height: 28px;
  cursor: pointer;
  box-sizing: border-box;
  text-align: center;
  border: 0;

&.active {
   background-color: red;
   color: #fff;
 }
}
}


</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王要一直努力噢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值