• 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 {
       50%;
      height: 30px;
      background: yellow;
      list-style: none;
      border-right: 1px solid;
    }
    .curt {
      color: red;
    }
    </style>
    
  • 相关阅读:
    jQuery Validate input是动态变化的
    flexigrid随手记
    今日随笔:scrollTop与overflow
    滚动条自动滚到底
    团队项目计划会议
    电梯演讲视频+原型展示
    NABCD项目分析
    团队第一次会议纪要
    软件开发团队介绍
    2020年11月24日
  • 原文地址:https://www.cnblogs.com/yzyh/p/12879435.html
Copyright © 2020-2023  润新知