vue纯手写PC端分页

公共组件:page.vue

<template>
  <aside class="pager" v-if="len>1">
    <div class="pager_box">
      <span :class="{disabled:now<=1}" @click="getData(now-1)"><</span>
      <template v-if="len <= 6 || (len === 7 && now === 4)">
        <span v-for="(i, k) in len" :class="['pager_item', {active:i === now}]" @click="getData(i)" :key="k">{{ i }}</span>
      </template>
      <template v-else-if="now <= 4 && now < len - 3">
        <span v-for="(i, k) in (now + 2)" :class="['pager_item', {active:i === now}]" @click="getData(i)" :key="k" v-if="i < (now + 3)">{{ i }}</span>
        <span>...</span>
        <span class="pager_item" @click="getData(len)">{{len}}</span>
      </template>
      <template v-else-if="now > 4 && now >= (len - 3)">
        <span class="pager_item" @click="getData(1)">1</span>
        <span>...</span>
        <span v-for="(i, k) in len" :class="['pager_item', {active:i === now}]" @click="getData(i)" :key="k" v-if="i > (now - 3) && i < (now + 4)">{{ i }}</span>
      </template>
      <template v-else>
        <span class="pager_item" @click="getData(1)">1</span>
        <span>...</span>
        <span v-for="(i, k) in (now + 2)" :class="['pager_item', {active:i === now}]" @click="getData(i)" :key="k" v-if="i > (now - 3)">{{ i }}</span>
        <span>...</span>
        <span class="pager_item" @click="getData(1)">{{len}}</span>
      </template>
      <span :class="{disabled:now>=len}" @click="getData(now+1,1)">></span>
    </div>
  </aside>
</template>

<script>
  export default {
    name: 'pager',
    props: {
      len: {
        type: Number
      },
      now: {
        type: Number
      }
    },
    data () {
      return {
        rightSibling: 0,
        leftSibling: 0
      }
    },
    methods: {
      getData (p, type) {
        if (p <= 0 || p > this.len) return false
        this.$emit('getList', p)
        if (type) {
          if (this.now >= this.len - 2) return false
          this.leftSibling = p
          this.rightSibling = this.leftSibling + 1
        } else {
          if (this.now <= 4) return false
          this.rightSibling = p
          this.leftSibling = this.rightSibling - 1
        }
      }
    },
    mounted () {
      // console.log(this.now)
    }
  }
</script>

<style type="text/css" lang="scss">
  @import '~@/assets/css/style.scss';
  .pager{
    padding-top:20px;
    padding-bottom:50px;
    .pager_box{
      float: right;
      box-shadow: 5px 5px 5px #e0e6f3, -5px 5px 5px #e0e6f3;
      span{
        display: inline-block;
        padding: 0 15px;
        text-align: center;
        line-height: 40px;
        height: 40px;
        color: #999;
        background: #fff;
        cursor: pointer;
      }
      span:hover, span.active{
        background: #327fff;
        color: #fff;
      }
      span.disabled{
        background: #f3eded;
        color: #c7c1c1;
      }
    }
  }
</style>

在主页面引入并且使用分页组件:

import Pager from '@/component/common/page'
data (){
  return {
    len: 0,
    now: 1, // 当前页
  }
}

methods: {
    getList (n) {
      this.lists = []
      this.now = n
      this.$api.post('index/news_list', {limit: 6, page: this.now}).then(res => {
        this.lists = res.news_list
        this.show = !res.news_list.length
        if (this.now > 1) return false
        this.len = Math.ceil(res.total / 6)
      })
    },
}
<Pager :len="len" :now="now" @getList="getList"></Pager>

初始化,刚进页面的时候调用:

mounted () {
    this.getList(1)
}

效果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值