Zepto 或者 jQuery 1.7以上版本,推荐jQuery 2.x版本(二者不要同时引用)
Zepto or jQuery 1.7+,recommend to use jQuery 2.x(not use them at the same time)
引用css和js
(basic)
<link rel="stylesheet" href="../dist/dropload.css"> <script src="../dist/dropload.min.js"></script>
$('.element').dropload({ scrollArea : window, loadDownFn : function(me){ $.ajax({ type: 'GET', url: 'json/more.json', dataType: 'json', success: function(data){ alert(data); // 每次数据加载完,必须重置 me.resetload(); }, error: function(xhr, type){ alert('Ajax error!'); // 即使加载出错,也得重置 me.resetload(); } }); } });
(注明:所有示例里ajax和setTimeout都是为了模拟加载效果而写的,与本插件无直接关系。ajax建议自己写,无特殊情况不必copy我的ajax写法,因为写得太烂。如需下载本地运行,请在本机装服务器环境,否则ajax会报错。)
参数 | 说明 | 默认值 | 可填值 |
---|---|---|---|
scrollArea | 滑动区域 | 绑定元素自身 | window |
domUp | 上方DOM | { domClass : 'dropload-up', domRefresh : '<div class="dropload-refresh">↓下拉刷新</div>', domUpdate : '<div class="dropload-update">↑释放更新</div>', domLoad : '<div class="dropload-load">○加载中...</div>' } | 数组 |
domDown | 下方DOM | { domClass : 'dropload-down', domRefresh : '<div class="dropload-refresh">↑上拉加载更多</div>', domLoad : '<div class="dropload-load">○加载中...</div>', domNoData : '<div class="dropload-noData">暂无数据</div>' } | 数组 |
autoLoad | 自动加载 | true | true和false |
distance | 拉动距离 | 50 | 数字 |
threshold | 提前加载距离 | 加载区高度2/3 | 正整数 |
loadUpFn | 上方function | 空 | function(me){ //你的代码 me.resetload(); } |
loadDownFn | 下方function | 空 | function(me){ //你的代码 me.resetload(); } |
暴露一些功能,可以让dropload更灵活的使用
lock() 锁定dropload
参数 | 说明 |
---|---|
lock() | 智能锁定,锁定上一次加载的方向 |
lock('up') | 锁定上方 |
lock('down') | 锁定下方 |
unlock() 解锁dropload
noData() 无数据
参数 | 说明 |
---|---|
noData() | 无数据 |
noData(true) | 无数据 |
noData(false) | 有数据 |
resetload() 重置。每次数据加载完,必须重置
dropReload() 手动加载
由于部分Android中UC和QQ浏览器头部有地址栏,并且一开始滑动页面隐藏地址栏时,无法触发scroll和resize,所以会导致部分情况无法使用。解决方案1:增加distance距离,例如DEMO2中distance:50;解决方案2:加meta使之全屏显示
<meta name="full-screen" content="yes"> <meta name="x5-fullscreen" content="true">
看源码,无限加载是因为这个
// 如果文档高度不大于窗口高度,数据较少,自动加载下方数据 function fnAutoLoad(me) { if (me.opts.autoLoad) { if ((me._scrollContentHeight - me._threshold) <= me._scrollWindowHeight) { loadDown(me); } } }
根据实际情况 ,如果数据本身较少 me.lock() me.nodata(true)
load.js下拉列表数据加载结束后,回到顶端刷新页面,数据就不在重新加载。
原因一、页面展示在tabbar中,tabbar框架div中calss="weui-tab_panel"和class="weui_tab_bd_item"样式为height:100%和overflow:auto; load.js需要自身控制div的高度和进度条,需要手动设置页面设置height:auto; overflow:hidden;页面加载数据的高度和进度条就可以通过load.js控制。
原因二、load方法规范问题,按照例子一点可出错。
loadUpFn (简写 up)和loadDownFn(简写 down)
1)up中数据拼接需要用$(".name").html(val),down中数据拼接用$(".name").append(val)
2)
问题:load.js下拉数据列表加载结束后,回到顶端刷新页面,数据就不在重新加载。
原因一
页面展示在tabbar中,tabbar框架div中calss="weui-tab_panel"和class="weui_tab_bd_item"样式为height:100%和overflow:auto; load.js需要自身控制div的高度和进度条,需要手动设置页面设置height:auto; overflow:hidden;页面加载数据的高度和进度条就可以通过load.js控制。
原因二
load方法规范问题,按照例子一点也不可出错,主要有以下几点:
loadUpFn (简写 up)和loadDownFn(简写 down)
1)up中数据拼接需要用$(".name").html(val),down中数据拼接用$(".name").append(val)
2) up和down中结束后必须重置,me.resetload()
3) 数据锁定情况可能会影响数据加载,就将所有数据中的锁定me.lock()都注释掉
4)up方法结束后,设置提前加载距离threshold:50
5) 为了防止数据锁死,将所有锁定方法都注释掉
6)当无数据noData()时,要标明参数noData(true)--无数据; noData(false)--有数据
7) 每页展示个数设置,在load方法之前声明设置page=0从0开始, size=10,在page.java文件中,将pageSize = 10即可展示每页10个数据。
项目中遇到的搜索问题:
初始加载的数据如果浏览到底部后再进行搜索,则搜索结果无法触发上拉加载。
例子中在上拉加载和下拉刷新时执行了一个resetLoad()方法,这个方法内部触发了fnRecoverContentHeight函数重新获取加载区的高度,而没数据时则不会触发。
我的方法是在load.js的这里重新获取了下高度:
else{ // 如果没数据 fnRecoverContentHeight(me); me.$domDown.html(me.opts.domDown.domNoData); }
页面js里注意要添加
myload.unlock(); myload.resetload();