0.1.5 • Published 4 years ago

vue-scroll-refresh-load v0.1.5

Weekly downloads
26
License
-
Repository
github
Last release
4 years ago

vue-scroll-refresh-load

A better-scroll - based drop-down refresh, pull-up load Vue plug-in(一个基于better-scroll的下拉刷新、上拉加载Vue插件)

效果预览

效果预览

Live Demo

安装

npm install vue-scroll-refresh-load --save

基本使用

/*****main.js****/
import VueScrollRefreshLoad from 'vue-scroll-refresh-load';
// 全局注册组件
Vue.component(VueScrollRefreshLoad.name, VueScrollRefreshLoad);



/*****组件内使用****/
<template>   
    <VueScrollRefreshLoad
        ref="vueScroll"
        :pull-up-load-error="pullUpLoadError"
        :pull-up-load-no-more-data="pullUpLoadNoMoreData"
        :height="height"
        @refresh="onRefresh"
        @pullup="onPullup"
        @rePullUp="onRePullUp">
      <template v-if="!loading">
        <h1 v-for="(item, index) in dataList" :key="index">我是第{{item}}个元素</h1>
      </template>
      <h1 v-if="loading">数据加载中...</h1>
    </VueScrollRefreshLoad>
</template>

<script>
import VueScrollRefreshLoad from "./components/vue-scroll-refresh-load/VueScrollRefreshLoad";

function getOneRandomList(step = 0) {
  console.log('step', step)
  const arr = Array.apply(null, {length: (30 + step)}).map((...args) => {
    return step * 30 + args[1];
  });

  return arr;
}
export default {
  name: "app",
  components: {
    VueScrollRefreshLoad
  },
  data(){
    return {
      dataList: [],
      step: 0,
      pullupTime: 0,
      pullDownTime: 0,
      pullUpLoadError: false,
      pullUpLoadNoMoreData: false,
      height: 300,
      loading: true
    };
  },
  methods: {
    // 触发下拉刷新后的回调事件 ---- 必要的
    async onRefresh(done) {
      if(this.pullDownTime === 1){
        let timer = setTimeout(() => {
          clearTimeout(timer);
          /*
            不管下拉刷新获取数据成功或失败都需要调用 done() 方法结束当前下拉刷新,
            如不调用 done() 方法,则再次不能进行下拉刷新操作。传递 false 参数表示刷新数据失败
           */
          done(false);
        }, 1500);
        return;
      }
      await this.requestData();
      /*
        不管下拉刷新获取数据成功或失败都需要调用 done() 方法结束当前下拉刷新,
        如不调用 done() 方法,则再次不能进行下拉刷新操作。传递 false 参数表示刷新数据失败
       */
      done();
      this.pullDownTime++;
    },
    // 触发上拉加载后的回调事件 ---- 必要的
    async onPullup(done){
      if(this.pullupTime === 2){
        let timer = setTimeout(() => {
          clearTimeout(timer);
          this.pullUpLoadError = true;
          //this.pullUpLoadNoMoreData = true;
          /*
            不管上拉加载获取数据成功或失败都需要调用 done() 方法结束当前上拉加载,
            如不调用 done() 方法,则再次不能进行上拉加载操作。
           */
          done();
        }, 1500);
        return;
      }
      await this.requestData(null, true);
      /*
        不管上拉加载获取数据成功或失败都需要调用 done() 方法结束当前上拉加载,
        如不调用 done() 方法,则再次不能进行上拉加载操作。
       */
      done();
      this.pullupTime++;
    },
    async requestData(cb, isAdditional) {
      try {
        const newData = await this.ajaxGet(/* url */);
        this.loading = false;
        if(isAdditional){
          let arr = this.dataList.concat(newData);
          this.dataList = arr;
        }else {
          this.dataList = newData;
        }

        this.step++;
        if(cb && typeof cb === 'function'){
          cb();
        }
      } catch (err) {
        console.log(err);
      }
    },
    ajaxGet(/* url */) {
      return new Promise(resolve => {
        let timer = setTimeout(() => {
          clearTimeout(timer);
          const dataList = getOneRandomList(this.step);
          resolve(dataList);
        }, 2000);
      });
    },
    // 重新加载数据事件,点击重新加载按钮后立即触发
    async onRePullUp(done){
      this.pullUpLoadError = false;
      await this.requestData(null, true);
      done();
      this.pullupTime++;
    }
  },
  mounted() {
    this.requestData(() => {
      // 获取数据后需要刷新 better-scroll ,否则不能滚动或滚动不正确
        this.$refs.vueScroll.refresh();

        let timer = setTimeout(() => {
        /*console.log('手动下拉刷新!');
        this.$refs.vueScroll.autoPullDownRefresh();*/
        console.log('改变高度了');
        clearTimeout(timer);
        // 动态改变高度
        this.height = 450;
      }, 1000);
    });
  }
};
</script>

组件Props

Props名称描述数据类型默认值
loadingText加载中提示文字,下拉刷新、上拉加载的都会使用到Boolean加载中...
beforePullDownText下拉刷新前显示的文字String下拉即可刷新
pullDownRefreshSuccessText下拉刷新成功获取数据后的文字String数据刷新成功!
pullDownRefreshErrorText下拉刷新获取数据失败后的文字String数据加载失败!
pullUpFetchDataErrorText上拉加载数据请求失败时显示的文字String请求失败,点击重新加载
pullUpFetchDataNoMoreText上拉加载数据无更多数据时显示的文字String已经到底部,没有更多内容了
pullDownConfig下拉刷新配置,如果配置值为false,则不会开启下拉刷新功能。具体配置请参考 better-scroll pulldown配置BooleanObject{ threshold: 60 }
pullUpConfig上拉加载配置,如果配置值为false,则不会开启上拉加载功能。具体配置请参考 better-scroll pullup配置BooleanObjecttrue
betterScrollConfigbetter-scroll配置。具体配置请参考 better-scroll配置Object{}
scrollbar是否开启scrollbarBooleantrue
height容器高度,如果容器高度为0则默认取父级容器的高度。高度变化会自动刷新better-scrollNumber0
stopTime数据刷新后better-scroll弹起停留时间Number600
pullUpLoadError上拉加载数据是否出错,为true底部会显示数据加载出错提示,点击可重新获取数据Booleanfalse
pullUpLoadNoMoreData上拉加载是否已经没有更多数据了Booleanfalse
click是否支持click事件,与better-scroll配置click作用一致Booleantrue
autoInit是否自动初始化 better-scrollBooleantrue
disabled是否禁用 better-scrollBoolean'false'
dataLoading数据是否加载中,每当这个值改变,better-scroll都会自动刷新Boolean'false'

组件事件

事件名描述回调参数
onInitbetter-scroll 初始化完成事件better-scroll初始化完成后会立即触发该事件
refresh下拉刷新事件done方法不管下拉刷新数据成功或失败都必须调用done方法来结束下拉刷新,否则不能再次进行下拉刷新操作。done方法还可以传递一个Boolean类型的参数,当传递的参数false表示下拉刷新失败,下拉刷新失败后会显示下拉刷新失败后的提示文案!
pullup上拉加载事件done方法不管下拉刷新数据成功或失败都必须调用done方法来结束上拉加载,否则不能再次进行上拉加载操作。
rePullUp点击按钮重新上拉加载事件done方法不管下拉刷新数据成功或失败都必须调用done方法来结束上拉加载,否则不能再次进行上拉加载操作。

可用方法

方法名描述参数返回值
initScroll初始化better-scrollbetter-scroll实例
refresh刷新better-scrollundefined
autoPullDownRefresh手动执行下拉刷新操作isLoadDataSuccess表示下拉刷新数据是否成功,数据类型为Booleanundefined
finishPullDown结束下拉刷新undefined
finishPullUp结束上拉加载undefined
enable启用better-scrollundefined
disable禁用better-scrollundefined
scrollTo同better-scroll scrollTo方法x, y, time, easingundefined
scrollBy同better-scroll scrollBy方法x, y, time, easingundefined
scrollToElement同better-scroll scrollToElement方法el, time, offsetX, offsetY, easingundefined