基于第三方插件better-scroll實(shí)現(xiàn)vue滾動(dòng)分頁(yè)組件

better-scroll版本:"^1.9.1"

1、實(shí)現(xiàn)組件

<!-- better-scroll 滾動(dòng)分頁(yè)組件 -->

<template>
  <div ref="wrapper" class="my-scroll">
    <slot></slot>
  </div>
</template>

<script>
import BScroll from "better-scroll";
export default {
  components: {},
  props: {
    // 傳入的數(shù)據(jù)
    totalPage: {
      type: Number,
      default: null
    },
    currentPage: {
      type: Number,
      default: null
    },
    probeType: {
      type: Number,
      default: 1
    },
    click: {
      type: Boolean,
      default: true
    },
    // 是否監(jiān)聽(tīng)滾動(dòng)位置
    listenScroll: {
      type: Boolean,
      default: false
    },
    // 是否開(kāi)啟上拉刷新
    pullUpLoad: {
      type: Number,
      default: -50
    },
    // 延遲刷新
    refreshDelay: {
      type: Number,
      default: 20
    }
  },
  methods: {
    _initScroll() {
      if (!this.$refs.wrapper) {
        return;
      }
      this.scroll = new BScroll(this.$refs.wrapper, {
        probeType: this.probeType,
        click: this.click,
        pullUpLoad: { threshold: this.pullUpLoad }
      });
      // 派發(fā)上拉刷新事件
      if (this.pullUpLoad) {
        let me = this;
        me.scroll.on("pullingUp", function(position) {
          if (me.currentPage < me.totalPage) {
            me.$emit("refreshList", me.currentPage + 1);
            me.scroll.finishPullUp();
            me.scroll.refresh();
          }
        });
      }
    },
    refresh() {
      this.scroll && this.scroll.refresh();
    }
  },
  mounted() {
    setTimeout(() => {
      this._initScroll();
    }, 20);
  }
};
</script>

<style lang="less" scoped>
.my-scroll {
  height: 100%;
}
</style>

2、調(diào)用組件

<Scroll ref="scroll" @refreshList="_findDoctorArticle" :totalPage="totalPage" :currentPage="currentPage">
  這里一堆dom....
  這里一堆dom....
  這里一堆dom....
</Scroll>

data() {
    return {
      articleList: [],
      currentPage: 1,
      pageSize: 4,
      totalPage: null
    };
  },
  components: {
    Scroll
  },
  methods: {
    //獲取熱門(mén)文章數(shù)據(jù)
    async _findDoctorArticle(currentPage = 1) {
      this.currentPage = currentPage;
      let currentPageData = await findDoctorArticle(this.pageSize, currentPage);
      this.totalPage = currentPageData.query.totalPage;
      this.articleList = this.articleList.concat(currentPageData.model);
    }
  },
  mounted() {
    this._findDoctorArticle();
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容