前言
在手机端实现下拉刷新和下拉加载是最常见不过的需求了。今天大师兄就给大家分享一个非常精致的js框架:mescroll.
提示:以下是本篇文章正文内容,下面案例可供参考
一、mescroll简介
mescroll.js 是在 H5端 运行的下拉刷新和上拉加载插件。1.4.1以上版本,还能配置图片懒加载效果。
mescroll.js 是原生Javascript开发的, 不依赖jquery,zepto等,还支持vue。
二、快速开始
- 下载并引用 mescroll.min.css , mescroll.min.js
// unpkg的CDN:
<link rel="stylesheet" href="https://unpkg.com/mescroll.js@1.4.1/mescroll.min.css">
<script src="https://unpkg.com/mescroll.js@1.4.1/mescroll.min.js" charset="utf-8"></script>
// jsdelivr的CDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/mescroll.js@1.4.1/mescroll.min.css">
<script src="https://cdn.jsdelivr.net/npm/mescroll.js@1.4.1/mescroll.min.js" charset="utf-8"></script>
- 这是基础版本的使用,方便新手快速开始2. 拷贝以下布局结构 :
<div id="mescroll" class="mescroll"> //id可自定义
<div> //这个div不能删,否则上拉加载的布局会错位.
//列表内容...
</div>
</div>
- 这里注意:"mescroll"的class不能删,同时第二层的div不能删,否则上拉加载的布局会错位.(可以改成ul或者其他容器标签)3. 固定mescroll的div高度. 推荐通过定位的方式,简单快捷
.mescroll{
position: fixed;
top: 50px;
bottom: 0;
height: auto;
}
- 创建mescroll对象 :
var mescroll = new MeScroll("mescroll", {
down: {
callback: downCallback
},
up: {
callback: upCallback,
}
});
上拉加载时,除了callback属性回调外,还有其他常用的配置,如:加载页码配置:page: { num : 0 ,size : 10 ,time : null},
无数据的布局:htmlNodata:
– END – (可自定义内容),
回到顶部按钮的配置:toTop: {src:‘…’, offset: 50, btnClick: null},
懒加载:lazyLoad: {use: true, attr: ‘imgurl’, delay:500, …}等。5. 处理回调(刷新和加载) :
function downCallback() {
mescroll.resetUpScroll()
$.ajax({
url: 'xxxxxx',
success: function(data) {
mescroll.endSuccess();
},
error: function(data) {
mescroll.endErr();
}
});
}
function upCallback(page) {
var pageNum = page.num;
var pageSize = page.size;
$.ajax({
url: 'xxxxxx?num=' + pageNum + "&size=" + pageSize,
success: function(data) {
var curPageData = data.xxx;
var totalPage = data.xxx;
var totalSize = data.xxx;
var hasNext = data.xxx;
1. 使配置的noMoreSize 和 empty生效
2. 判断是否有下一页的首要依据:
当传的值小于page.size时(说明不满页了),则一定会认为无更多数据;
比传入的totalPage, totalSize, hasNext具有更高的判断优先级;
3. 当传的值等于page.size时,才会取totalPage, totalSize, hasNext判断是否有下一页
传totalPage, totalSize, hasNext目的是避免方法四描述的小问题
},
error: function(e) {
mescroll.endErr();
}
});
}
– 以上为mescroll最基本的用法,强烈建议您下载并查看 mescroll官网的基础案例 , 发现mescroll更强大的功能 ~
三、一分钟入门mescroll图片懒加载
- 确保mescroll至少到1.4.1版本
- 初始化mescroll的时候,在up中配置lazyLoad的use为true :
var mescroll = new MeScroll("mescroll", {
up: {
lazyLoad: {
use: true,
attr: 'imgurl',
showClass: 'mescroll-lazy-in',
delay: 500,
offset: 200
}
}
})
- 设置img或div的 imgurl 属性, 值为图片的网络地址
img标签: <img imgurl="网络图" src="占位图"/>
div或其他标签: <div imgurl="网络图" style="background-image: url(占位图)"><div>
- 至此mescroll的懒加载功能已经可以正常使用了,mescroll在列表滚动时会自动加载可视区域内的图片. 另外,有时候您可能会动态添加或修改图片,希望手动触发一下懒加载, 那么只需调用如下方法:
mescroll.lazyLoad() 或 mescroll.endByPage() 或 mescroll.endBySize() 或 mescroll.endSuccess() 即可.
四、mescroll在vue中的使用
不要使用cnpm安装, 因为更新下来有可能是旧的版本, 使用npm或yarn
npm install --save mescroll.js
或
yarn add mescroll.js
引入mescroll组件
import MescrollVue from 'mescroll.js/mescroll.vue'
页面示例代码
<template>
<div>
<mescroll-vue ref="mescroll" :down="mescrollDown" :up="mescrollUp" @init="mescrollInit">
</mescroll-vue>
</div>
</template>
<script>
import MescrollVue from 'mescroll.js/mescroll.vue'
export default {
components: {
MescrollVue
},
data () {
return {
mescroll: null,
mescrollDown:{},
mescrollUp: {
callback: this.upCallback,
},
dataList: []
}
},
beforeRouteEnter (to, from, next) {
next(vm => {
vm.$refs.mescroll && vm.$refs.mescroll.beforeRouteEnter()
})
},
beforeRouteLeave (to, from, next) {
this.$refs.mescroll && this.$refs.mescroll.beforeRouteLeave()
next()
},
methods: {
mescrollInit (mescroll) {
this.mescroll = mescroll
},
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>
五、小结
mescroll可以实习一套代码多端运行, 支持uni-app,完美运行于android, iOS, 手机各浏览器,且兼容PC端主流浏览器。官网文档也很相信,还有很多经典案例供学习和使用。温馨提示:一个界面可有多个mescroll实例/组件。
mescroll 地址 http://www.mescroll.com/
文章来自 大师兄 @微信公众号 前端实验室
|