移动端下拉刷新、上拉加载更多 Zepto/jQuery插件

所属分类:UI-滚动,加载

 472431  801  查看评论 (151)
分享到微信朋友圈
X
移动端下拉刷新、上拉加载更多 Zepto/jQuery插件 ie兼容10

依赖 (dependence)

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)

使用方法 (usage)

引用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会报错。)

参数列表 (options)

参数说明默认值可填值
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自动加载truetrue和false
distance拉动距离50数字
threshold提前加载距离加载区高度2/3正整数
loadUpFn上方functionfunction(me){
//你的代码
me.resetload();
}
loadDownFn下方functionfunction(me){
//你的代码
me.resetload();
}

API

暴露一些功能,可以让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">


相关插件-滚动,加载

原生js向上滚动消息框

原生js封装的滚动消息框,简单实用
  滚动
 29960  329

jQuery滚轮控制轮播图上下切换(原创)

jQuery滚轮控制轮播图上下切换,简单实用
  滚动
 39666  341
  滚动
 37986  360

页面过度效果大集合(推荐!)

jQuery页面过度效果大集合
  滚动
 76088  1338

讨论这个项目(151)回答他人问题或分享插件使用方法奖励jQ币 评论用户自律公约

    ________________________ 0
    2020/6/13 21:35:54

    看源码,无限加载是因为这个  

    // 如果文档高度不大于窗口高度,数据较少,自动加载下方数据
    function fnAutoLoad(me) {
        if (me.opts.autoLoad) {
            if ((me._scrollContentHeight - me._threshold) <= me._scrollWindowHeight) {
                loadDown(me);
            }
        }
    }

    根据实际情况 ,如果数据本身较少   me.lock() me.nodata(true)

    回复
    0
    2020/5/19 17:43:20
    这个如果触发同一个滚动事件,数据就只能加载一次是为什么,,,改不动,,有人遇到过吗 回复
    hua I ting 0
    2020/4/27 17:52:52

    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)

        hua I ting3
        2020/4/28 16:18:37

        问题: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个数据。

    回复
    asxw00 0
    2019/8/29 20:49:49
    我切换tab,为啥加载不了数据呢,需要手动下拉加载才有数据? 回复
    ╇ミ???-? 0
    2019/5/17 17:17:28
    那个提示加载更多在顶部出现了?怎么解决
        二十四桥丶明月夜1
        2019/8/12 14:50:16
        你放的地方不对 $('.inner').load({ }) 和 $('.lists').append(result); 这两个盒子是不同的 仔细看作者的案例。
    回复
    maomao123123 0
    2019/4/24 16:36:45
    做了一个搜索功能,在手机上,搜索到的数据渲染后,会把全部数据又渲染,请教 回复
    王洪伟 0
    2019/4/10 21:31:17
    默默问一下,如何修改加载文字
        sixsix0
        2019/5/30 14:42:27
        js文件里面改
    回复
    AF 0
    2019/1/22 10:49:57
    会无限加载数据
    回复
    1085781437 1
    2018/12/28 14:30:23

    项目中遇到的搜索问题:
    初始加载的数据如果浏览到底部后再进行搜索,则搜索结果无法触发上拉加载。

    例子中在上拉加载和下拉刷新时执行了一个resetLoad()方法,这个方法内部触发了fnRecoverContentHeight函数重新获取加载区的高度,而没数据时则不会触发。

    我的方法是在load.js的这里重新获取了下高度:

    else{
          // 如果没数据
          fnRecoverContentHeight(me);
          me.$domDown.html(me.opts.domDown.domNoData);
    }

    页面js里注意要添加

    myload.unlock();
    myload.resetload();
        云天0
        2019/1/22 9:45:47
        如果容器给了position: absolute;,会一次性全部加载出所有数据,怎么会这样呢,怎么搞
        Xiah ^_^0
        2019/5/7 17:14:32
        我重新调用计算高度,安卓的浏览器下面只显示 上拉加载更多,但是上拉无效果,咋整啊?
    回复
    1085781437 1
    2018/12/22 10:40:16
    说一下在自己的项目中遇到的问题:
    无限加载bug: 在html、body中加入了overflow:auto,从而导致了上拉时上拉加载样式不改变并且在手机端会自动无限上拉加载数据的bug。
    修复: 去掉overflow:auto即可。
    望知道原理的大神告知 回复
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
取消回复