-
原生js, 支持vue, 不依赖jquery,zepto
-
一套代码多端运行. 完美运行于android,iOS,手机浏览器,兼容PC主流浏览器
-
参数自由搭配, 随心定制, 轻松拓展
-
主流APP案例, 丰富经典
-
免费商用
- 最新版本:1.3.2 (2018年01月01日) 重要升级
- 功能亮点
- 快速入门
- vue的示例
- mescroll.m.js和mescroll.min.js
- 基础案例 base demos
- 中级案例 intermediate demos
- 高级案例 senior demos
- 下载基础中级案例
- 获取高级案例
- API文档
- 常用方法
- 其他方法
- 常见问题
- 打赏排行榜
-
自动判断和提示列表无任何数据或无更多数据
-
支持监听列表滚动事件,无需手动判断处理列表的页码,时间等变量
-
可指定列表滚动到任何位置,附带平滑效果一键滚动到顶部或底部
-
可配置列表数据不满屏时,自动加载下一页
-
一个界面可支持多个下拉刷新,上拉加载
-
可临时锁定下拉刷新和上拉加载
特别感谢 @channg 帮忙整理发布NPM
https://www.npmjs.com/package/mescroll.js NPM 安装命令:
npm install mescroll.js
npm install vue-mescroll
<div id="mescroll" class="mescroll"> //id可以改,而"mescroll"的class不能删
//列表内容,如:<ul>列表数据</ul> ...
</div>
var mescroll = new MeScroll("mescroll", { //第一个参数"mescroll"对应上面布局结构div的id
down: {
callback: downCallback //下拉刷新的回调,别写成downCallback(),多了括号就自动执行方法了
},
up: {
callback: upCallback //上拉加载回调,简写callback:function(page){upCallback(page);}
}
});
import Mescroll from 'vue-mescroll/mescroll'
<me-scroll
ref="mescroll"
:id="mescroll" //id默认为 mescroll
:opt-up="{}" //up 参数配置(isBounce 默认未false)
:opt-down="{}" //down 参数配置
:callback="() => {}" //统一回调(up、down均使用此回调)
:up-callback="() => {}" //up 回调
:down-callback="() => {}"> //down 回调
//列表内容,如:<ul>列表数据</ul> ...
</me-scroll>
this.$refs.mescroll.instance
1. 如果您的下拉刷新是重置列表数据,那么down完全可以不用配置,具体用法参考第一个基础案例
2. 如果您的项目是在iOS的微信,QQ,Safari等浏览器访问的,则建议配置up的isBounce为false,禁止ios的回弹效果; 解析(必读)
//下拉刷新的回调
function downCallback(){
$.ajax({
url: 'xxxxxx',
success: function(data){
//联网成功的回调,隐藏下拉刷新的状态;
mescroll.endSuccess();//无参
//设置数据
//setXxxx(data);//自行实现 TODO
},
error: function(data){
//联网失败的回调,隐藏下拉刷新的状态
mescroll.endErr();
}
});
}
//上拉加载的回调 page = {num:1, size:10}; num:当前页 从1开始, size:每页数据条数
function upCallback(page){
$.ajax({
url: 'xxxxxx?num='+ page.num +"&size="+ page.size,
success: function(curPageData){
//联网成功的回调,隐藏下拉刷新和上拉加载的状态;
//mescroll会根据传的参数,自动判断列表如果无任何数据,则提示空;列表无下一页数据,则提示无更多数据;
//方法一(推荐): 后台接口有返回列表的总页数 totalPage
//必传参数(当前页的数据个数, 总页数)
//mescroll.endByPage(curPageData.length, totalPage);
//方法二(推荐): 后台接口有返回列表的总数据量 totalSize
//必传参数(当前页的数据个数, 总数据量)
//mescroll.endBySize(curPageData.length, totalSize);
//方法三(推荐): 您有其他方式知道是否有下一页 hasNext
//必传参数(当前页的数据个数, 是否有下一页true/false)
//mescroll.endSuccess(curPageData.length, hasNext);
//方法四 (不推荐),会存在一个小问题:比如列表共有20条数据,每页加载10条,共2页.
//如果只根据当前页的数据个数判断,则需翻到第三页才会知道无更多数据
//如果传了hasNext,则翻到第二页即可显示无更多数据.
//mescroll.endSuccess(curPageData.length);
//设置列表数据
//setListData(curPageData);//自行实现 TODO
},
error: function(){
//联网失败的回调,隐藏下拉刷新和上拉加载的状态
mescroll.endErr();
}
});
}
--- mescroll在vue中的使用案例---------- 点此在线体验 ---------- 点此查看源码 ----------
--- 以上为mescroll最基本的用法,强烈建议您下载并查看 mescroll基础案例 , 发现mescroll更强大的功能 ~
--- 基础案例一共6个, 每个案例3分钟, 一共花您18分钟; 这18分钟您将了解mescroll在不同情况下应如何快速配置 ~
--- 磨刀不误砍柴工,心急吃不了热豆腐. 请静下心来体验与理解mescroll, 一定会让您事半功倍 ~
--- 如使用中有疑问, 请先查看 常见问题专区 ~
您如果在vue,angular等环境中,因作用域的问题未能正常引入或初始化Mescroll对象,则引用mescroll.m.js;
mescroll.m.js只是去掉了mescroll.min.js套的一层模块规范的代码:
;(function(name,definition){
//检测上下文环境是否为AMD或CMD
var hasDefine = typeof define === 'function',
// 检测上下文环境是否为Node
hasExports = typeof module !== 'function' && module.exports;
if(hasDefine){
//AMD环境或CMD环境
define(definition);
}else if(hasExports){
//定义为普通Node模块
module.exports = definition();
}else{
//将模块的执行结果挂在window变量中,在浏览器中this指向window对象
this[name] = definition();
}
})('Mescroll',function(){
var Mescroll = function(){}
return Mescroll
})
具体请参考 mescroll#56
//创建mescroll对象
var mescroll = new MeScroll("mescroll", { down: {下拉刷新的配置参数}, up: {上拉加载的配置参数} });
是否显示下拉刷新的进度
这是1.2.1版本新增的配置,请检查最新版~
注意:没有必要配置超出[0,90]区间的值,否则角度限制无效; 因为假设配置60, 生效的方位角就已经是60°到120° 和 240°到300°的范围了;
这是1.1.6版本新增的配置,请检查最新版~
1.3.1版本默认true 是否在初始化完毕之后自动执行一次上拉加载的回调
warpId: null,
src: null,
html: null,
offset: 1000,
warpClass: "mescroll-totop",
showClass: "mescroll-fade-in",
hideClass: "mescroll-fade-out",
duration: 300,
supportTap: false
} 回到顶部按钮的配置:
warpId: 父布局的id; 默认添加在body中 (v 1.2.8 新增)
src: 图片路径,必须配置src才会显示回到顶部按钮,不配置不显示
html: 标签内容,默认null; 如果同时设置了src,则优先取src (2017年12月10日新增)
offset: 列表滚动1000px显示回到顶部按钮
warpClass: 按钮样式,参见mescroll.css
showClass: 显示样式,参见mescroll.css
hideClass: 隐藏样式,参见mescroll.css
duration: 回到顶部的动画时长,默认300ms
supportTap: 如果您的运行环境支持tap,则可配置true,可减少点击延时,快速响应事件;默认false,通过onclick添加点击事件; (v 1.3.0 新增) (注:微信和PC无法响应tap事件)
use: false,
delay: 500
} use: 列表数据过少,不足以滑动触发上拉加载,是否自动加载下一页,直到满屏或者无更多数据为止; 默认false,因为可通过调高page.size避免这个情况
delay: 延时执行的毫秒数; 延时是为了保证列表数据或占位的图片都已初始化完成,且下拉刷新上拉加载中区域动画已执行完毕;
warpId: null,
icon: null,
tip: "暂无相关数据~",
btntext: "",
btnClick: null,
supportTap: false
} 列表第一页无任何数据时,显示的空提示布局; 需配置warpId或clearEmptyId才生效
warpId: 父布局的id; 如果此项有值,将不使用clearEmptyId的值;
icon: 空布局的图标路径
tip: 提示文本
btntext: 按钮文本
btnClick: 点击按钮的回调
supportTap: 如果您的运行环境支持tap,则可配置true,可减少点击延时,快速响应事件;默认false,通过onclick添加点击事件; (v 1.3.0 新增) (注:微信和PC无法响应tap事件)
例 onScroll : function(mescroll, y, isUp){ ... };
y为列表当前滚动条的位置;
isUp=true向上滑,isUp=false向下滑)
isUp是1.2.1版本新增的配置,请检查最新版~
num:0,
size:10,
time:null
} num: 当前页码,默认0,回调之前会加1,即callback(page)会从1开始;
size: 每页数据的数量;
time: 加载第一页数据服务器返回的时间;防止用户翻页时,后台新增了数据从而导致下一页数据重复;
use : ... ,
barClass : "mescroll-bar"
} use : 是否开启自定义滚动条; PC端默认true开启自定义滚动条; 移动端默认false不使用
barClass : 自定义滚动条的样式; 参见mescroll.css
(v 1.2.1 新增) 隐藏下拉刷新和上拉加载的状态, 在联网获取数据成功后调用
dataSize : 当前页获取的数据总数(注意是当前页)
totalPage : 列表的总页数
systime : 加载第一页数据的服务器时间 (可空);
(v 1.2.1 新增) 隐藏下拉刷新和上拉加载的状态, 在联网获取数据成功后调用
dataSize : 当前页获取的数据总数(注意是当前页)
totalSize : 列表的总数据量
systime : 加载第一页数据的服务器时间 (可空);
(v 1.2.1 调整) 隐藏下拉刷新和上拉加载的状态, 在联网获取数据成功后调用
dataSize : 当前页获取的数据量(注意是当前页)
hasNext : 是否有下一页数据true/false
systime : 加载第一页数据的服务器时间 (可空);
mescroll内部会自动恢复原来的页码,时间等变量;
内部实现: 把page.num=1,再主动触发up.callback
isShowLoading 是否显示进度布局;
1.默认null,不传参,则显示上拉加载的进度布局
2.传参true, 则显示下拉刷新的进度布局
3.传参false,则不显示上拉和下拉的进度 (常用于静默更新列表数据)
(v 1.2.5 新增) 设置当前page.num的值
(v 1.2.5 新增) 设置当前page.size的值
(v 1.2.5 新增) mescroll.os.ios 为true, 则是ios设备;
mescroll.os.android 为true, 则是android设备;
mescroll.os.pc 为true, 则是PC端;
(v 1.3.0 新增) mescroll.setBounce(true) 允许bounce;
mescroll.setBounce(false) 禁止bounce
mescroll.triggerDownScroll() 和 mescroll.resetUpScroll() 内部有调用
mescroll.endSuccess() 和 mescroll.endErr() 内部有调用
mescroll.triggerDownScroll() 和 mescroll.resetUpScroll() 内部有调用
mescroll.endUpScroll() 内部有调用
mescroll.endUpScroll() 内部有调用
mescroll.resetUpScroll() 和 mescroll.endSuccess() 内部有调用
此方法最好在列表的图片数据加载完成之后调用,以便计算列表内容高度的准确性
mescroll.endSuccess() 内部有调用
mescroll.endSuccess() 内部有调用
mescroll.endSuccess() 内部有调用
(v 1.3.0新增) 获取当前滚动条到底部的距离
(v 1.2.8 新增) star : 开始值;
end : 结束值;
callback(step,timer) : 回调 function(step,timer),
t : 计步时长; 传0则直接回调end值; 不传则默认300ms ;
rate : 周期; 不传则默认30ms计步一次 ;
此方法相当于默认在300ms内,每30ms返回star到end之间的阶梯值step; 可用于模拟帧动画
比如mescroll的回到顶部缓冲动画,轮播导航案例的顶部菜单滚动都是通过getStep实现
(注: 您可根据实际情况在 callback 通过 window.clearInterval(timer) 提前结束计步器)
(v 1.3.0新增) mescroll的版本号
mescroll高级案例源码 -- 京东 v6.1.0
mescroll高级案例源码 -- 美团 v8.2.3
mescroll高级案例源码 -- 美囤妈妈 v2.0.5
我是大神 , 我为mescroll添砖加瓦
在 GitHub 上 Star 和 Fork 了 mescroll
并提出优化或改进建议,获得了采纳 ~
我爱分享 , 编写mescroll相关案例
联系 QQ 2260429223 投稿
评审优化后,在mescroll官网展示
源码指向您的GitHub