vue 移动端 mescroll 精致上拉刷新下拉加载

最近用vue做公众号,用的mint-ui,公众号需要上拉刷新下拉加载,mint-ui也自己提供了上拉刷新下拉加载,但是他文档看着真的老壳痛,慢慢琢磨也写出来了,但是拉的时候各种问题,最后放弃了,于是在网上搜了一下也是没找到自己想要的,不过还好最后还是找到了一个好用的,叫:mescroll

官网链接: http://www.mescroll.com/api.html#mescrollvue
官网效果: http://www.mescroll.com/preview.html?name=list-products-vue

//在 vue-cli 中 mescroll组件的使用:(不要使用cnpm安装, 因为更新下来有可能是旧的版本)
//这里说一下用npm安装的时候我本地报了错,把npm版本降低后再文件夹安装成功了

1. 执行npm命令安装mescroll :   npm install --save mescroll.js

2. 引入mescroll组件 :   import MescrollVue from 'mescroll.js/mescroll.vue'

下面展示一些 内联代码片

<template>
  <div>
    <!--mescroll滚动区域的基本结构-->
    <mescroll-vue ref="mescroll" :down="mescrollDown" :up="mescrollUp" @init="mescrollInit">
      <!--内容...-->
    </mescroll-vue>
  </div>
</template>

<script>
// 引入mescroll的vue组件
import MescrollVue from 'mescroll.js/mescroll.vue'

export default {
  components: {
    MescrollVue // 注册mescroll组件
  },
  data () {
    return {
      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: [] // 列表数据
    }
  },
  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: {
    // mescroll组件初始化的回调,可获取到mescroll对象
    mescrollInit (mescroll) {
      this.mescroll = mescroll  // 如果this.mescroll对象没有使用到,则mescrollInit可以不用配置
    },
    // 上拉回调 page = {num:1, size:10}; num:当前页 ,默认从1开始; size:每页数据条数,默认10
    upCallback (page, mescroll) {
      // 联网请求
      axios.get('xxxxxx', {
        params: {
          num: page.num, // 页码
          size: page.size // 每页长度
        }
      }).then((response) => {
        // 请求的列表数据
        let arr = response.data
        // 如果是第一页需手动置空列表
        if (page.num === 1) this.dataList = []
        // 把请求到的数据添加到列表
        this.dataList = this.dataList.concat(arr)
        // 数据渲染成功后,隐藏下拉刷新的状态
        this.$nextTick(() => {
          mescroll.endSuccess(arr.length)
        })
      }).catch((e) => {
        // 联网失败的回调,隐藏下拉刷新和上拉加载的状态;
        mescroll.endErr()
      })
    }
  }
}
</script>

<style scoped>
  /*通过fixed固定mescroll的高度*/
  .mescroll {
    position: fixed;
    top: 44px;
    bottom: 0;
    height: auto;
  }
</style>
//如需手动调用列表方法代码如下:
this.mescroll.resetUpScroll() // 刷新列表数据  

没在ios测试过,看网上说ios会有卡顿不知道官网修复没不管怎样先贴下来

//scroll属性在ios手机上回出现卡顿问题
//在进行滚动的这个容器样式中添加这个属性:
-webkit-overflow-scrolling:touch;

猜你喜欢

转载自blog.csdn.net/u014206461/article/details/105979340