mescroll vue tab頁實現切換刷新列表


安裝

npm install --save mescroll.js   //不要使用cnpm安裝, 因為更新下來有可能是舊的版本

隨便起一個test.vue 拷貝下面代碼

<template>
  <div>
    <ul class="tab">
      <li
        v-for="(item, index) in [0, 1]"
        :key="'x' + index"
        :class="curtIndex === index ? 'curt' : ''"
        @click="checkd"
      >
        {{ item }}
      </li>
    </ul>
    <!--mescroll滾動區域的基本結構-->
    <mescroll-vue
      ref="mescroll"
      :down="mescrollDown"
      :up="mescrollUp"
      @init="mescrollInit"
    >
      <ul v-if="curtIndex === 0">
        <li
          v-for="item in dataList"
          :key="item.id"
        >{{ item.title }}</li>
      </ul>
      <ul v-else>
        <li
          v-for="item in dataList2"
          :key="item.id"
        >{{ item.title }}</li>
      </ul>
    </mescroll-vue>
  </div>
</template>

<script>
// 引入mescroll的vue組件
import MescrollVue from "mescroll.js/mescroll.vue";

export default {
  components: {
    MescrollVue // 注冊mescroll組件
  },
  data () {
    return {
      curtIndex: 0,
      mescroll: null, // mescroll實例對象
      mescrollDown: {}, //下拉刷新的配置. (如果下拉刷新和上拉加載處理的邏輯是一樣的,則mescrollDown可不用寫了)
      mescrollUp: {
        // 上拉加載的配置.
        callback: this.upCallback, // 上拉回調,此處簡寫; 相當於 callback: function(page, mescroll) { }
        //以下是一些常用的配置,當然不寫也可以的.
        page: {
          num: 0, //當前頁 默認0,回調之前會加1; 即callback(page)會從1開始
          size: 10 //每頁數據條數,默認10
        },
        htmlNodata: '<p class="upwarp-nodata">-- END --</p>',
        noMoreSize: 5, //如果列表已無數據,可設置列表的總數量要大於5才顯示無更多數據;
        // 避免列表數據過少(比如只有一條數據),顯示無更多數據會不好看
        // 這就是為什么無更多數據有時候不顯示的原因
        toTop: {
          //回到頂部按鈕
          src: "./static/mescroll/mescroll-totop.png", //圖片路徑,默認null,支持網絡圖
          offset: 1000 //列表滾動1000px才顯示回到頂部按鈕
        },
        empty: {
          //列表第一頁無任何數據時,顯示的空提示布局; 需配置warpId才顯示
          warpId: "xxid", //父布局的id (1.3.5版本支持傳入dom元素)
          icon: "./static/mescroll/mescroll-empty.png", //圖標,默認null,支持網絡圖
          tip: "暫無相關數據~" //提示
        }
      },
      dataList: [], // 列表數據
      dataList2: [] // 列表2數據
    };
  },
  beforeRouteEnter (to, from, next) {
    // 如果沒有配置頂部按鈕或isBounce,則beforeRouteEnter不用寫
    next(vm => {
      // 滾動到原來的列表位置,恢復頂部按鈕和isBounce的配置
      vm.$refs.mescroll && vm.$refs.mescroll.beforeRouteEnter();
    });
  },
  beforeRouteLeave (to, from, next) {
    // 如果沒有配置頂部按鈕或isBounce,則beforeRouteLeave不用寫
    // 記錄列表滾動的位置,隱藏頂部按鈕和isBounce的配置
    this.$refs.mescroll && this.$refs.mescroll.beforeRouteLeave();
    next();
  },
  methods: {
    checkd (e) {
      const index = +e.target.innerText;
      console.log(index);
      this.curtIndex = index;
      this.dataList = []; // 在這里手動置空列表,可顯示加載中的請求進度
      this.dataList2 = []; // 在這里手動置空列表,可顯示加載中的請求進度
      this.mescroll.resetUpScroll();
    },
    // mescroll組件初始化的回調,可獲取到mescroll對象
    mescrollInit (mescroll) {
      this.mescroll = mescroll; // 如果this.mescroll對象沒有使用到,則mescrollInit可以不用配置
    },
    // 上拉回調 page = {num:1, size:10}; num:當前頁 ,默認從1開始; size:每頁數據條數,默認10
    upCallback (page, mescroll) {
      const self = this;
      // 聯網請求
      setTimeout(() => {
        // 請求的列表數據
        let arr = [];
        for (let i = 0; i < 20; i += 1) {
          arr.push({
            id: i,
            title: `test${i}`
          });
        }
        // 如果是第一頁需手動置空列表
        if (self.curtIndex === 0) {
          if (page.num === 1) self.dataList = [];
          // 把請求到的數據添加到列表
          self.dataList = self.dataList.concat(arr);
        } else {
          if (page.num === 1) self.dataList2 = [];
          // 把請求到的數據添加到列表
          self.dataList2 = self.dataList2.concat(arr);
        }
        if (self.mescrollUp.page.num === 2) {
          mescroll.endSuccess(arr.length, false);
          return false;
        }
        // 數據渲染成功后,隱藏下拉刷新的狀態
        self.$nextTick(() => {
          mescroll.endSuccess(arr.length);
        });
      }, 1000);
    }
  }
};
</script>

<style scoped>
/*通過fixed固定mescroll的高度*/
.mescroll {
  position: fixed;
  top: 44px;
  bottom: 0;
  height: auto;
  font-size: 36px;
}
.tab {
  font-size: 36px;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
}
.tab > li {
  width: 50%;
  height: 30px;
  background: yellow;
  list-style: none;
  border-right: 1px solid;
}
.curt {
  color: red;
}
</style>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM