vue插件mescroll.js实现移动端上拉加载和下拉刷新


Posted in Javascript onMarch 07, 2019

做一个简单的移动端展示项目,后台分页后前端加载,实现上拉加载下一页,找了下,还是用这个mescroll.js插件好一点

1.npm安装

npm install --save mescroll.js //不要使用cnpm安装

导入(在哪个页面使用,则在哪个页面导入(这里的话,我使用全局导入会出现问题,若有错,还请大家指出,暂时想到的就是局部引入)):

import MescrollVue from ‘mescroll.js/mescroll.vue'

注册组件:

components: {
  MescrollVue // 注册mescroll组件
},

template使用

<mescroll-vue ref="mescroll" :down="mescrollDown" :up="mescrollUp" @init="mescrollInit" class="scrollView">
</mescroll-vue>

2.data里进行相关配置

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
    },
    noMoreSize: 5, //如果列表已无数据,可设置列表的总数量要大于5才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看
    toTop: {
      //回到顶部按钮
      src: "./static/mescroll/mescroll-totop.png", //图片路径,默认null,支持网络图
      offset: 1000 //列表滚动1000px才显示回到顶部按钮
    },
    htmlContent: '<p class="downwarp-progress"></p><p class="downwarp-tip">下拉刷新 </p>', //布局内容
    empty: {
      //列表第一页无任何数据时,显示的空提示布局; 需配置warpId才显示
      warpId: "xxid", //父布局的id (1.3.5版本支持传入dom元素)
      icon: "./static/mescroll/mescroll-empty.png", //图标,默认null,支持网络图
      tip: "暂无相关数据~" //提示
    }
  },
  articleList: [] // 列表数据
 }
},
beforeRouteEnter (to, from, next) { // 如果没有配置回到顶部按钮或isBounce,则beforeRouteEnter不用写
  next(vm => {
   vm.$refs.mescroll.beforeRouteEnter() // 进入路由时,滚动到原来的列表位置,恢复回到顶部按钮和isBounce的配置
  })
},
beforeRouteLeave (to, from, next) { // 如果没有配置回到顶部按钮或isBounce,则beforeRouteLeave不用写
  this.$refs.mescroll.beforeRouteLeave() // 退出路由时,记录列表滚动的位置,隐藏回到顶部按钮和isBounce的配置
  next()
},
methods: {
 mescrollInit(mescroll) {
   this.mescroll = mescroll;
 },
 upCallback(page, mescroll) {
  this.$Request({
    url: "",
    method: "get",
    data: {
     page: page.num
    },
    success: res => {
     if (res.status == 1) {
      let data = page.num == 1 ? [] : this.articleList;
      data.push(...res.result.data);
      this.articleList = data;
      // 数据渲染成功后,隐藏下拉刷新的状态
      this.$nextTick(() => {
       mescroll.endSuccess(res.result.data.length);
      });
     }
    }
  });
 }
 }
}

3.style样式

.mescroll {
  position: fixed;
  padding-bottom: 1rem;
  top: 2px;
  bottom: 0;
  height: auto;
}

具体的配置可以参考:mescroll配置

4.加载完成后

可以在data中的mescrollUp项中进行底部没有更多数据时的提示信息,'END'及'加载中...'这些内容可以自己设置

htmlLoading: '<p class="upwarp-progress mescroll-rotate"></p><p class="upwarp-tip">加载中..</p>', //上拉加载中的布局
htmlNodata: '<p class="upwarp-nodata">-- END --</p>', //无数据的布局

可以查看源码进行设置: mescroll源码(GitHub)

5.scroll属性在ios手机上回出现卡顿问题

在进行滚动的这个容器样式中添加这个属性:

-webkit-overflow-scrolling:touch;

但是的话,填加了这个兼容会导致定位为position:fixed的失去效果,看了一些资料,使用position:absolute可以解决,这个我没有具体的再去实验下,若有好的方法,还请大家能够在评论里告知下,感激不尽

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
超级兔子让浮动层消失的前因后果
Mar 09 Javascript
js arguments.callee的应用代码
May 07 Javascript
jqTransform form表单美化插件使用方法
Jul 05 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
Jan 15 Javascript
浅谈js中对象的使用
Aug 11 Javascript
jQuery中常用动画效果函数(日常整理)
Sep 17 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
Jan 05 Javascript
JS实现左边列表移到到右边列表功能
Mar 28 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
Aug 30 Javascript
详解CommonJS和ES6模块循环加载处理的区别
Dec 26 Javascript
vue下canvas裁剪图片实例讲解
Apr 16 Javascript
基于Vant UI框架实现时间段选择器
Dec 24 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
Mar 07 #Javascript
从0到1构建vueSSR项目之路由的构建
Mar 07 #Javascript
bootstrap-table实现表头固定以及列固定的方法示例
Mar 07 #Javascript
js如何获取图片url的Blob值并预览示例代码
Mar 07 #Javascript
mpvue全局引入sass文件的方法步骤
Mar 06 #Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
Mar 06 #Javascript
vue项目前端埋点的实现
Mar 06 #Javascript
You might like
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
Javascript小技巧之生成html元素
2014/05/15 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
Python写的服务监控程序实例
2015/01/31 Python
Python文件去除注释的方法
2015/05/25 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
浅谈Python中的私有变量
2018/02/28 Python
PyQt5每天必学之组合框
2018/04/20 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
本科生详细的自我评价
2013/09/19 职场文书
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
商务日语毕业生自荐信范文
2013/11/14 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
mysql分表之后如何平滑上线详解
2021/11/01 MySQL