在手机端使用dropload实现H5页面上拉加载,下拉刷新

引入dropload.js

dropload.js支持jquery和zepot,以jquery为例,在页面底端引入jquery和dropload.js:

<script type="text/javascript" src="js/jquery-3.3.1.min.js" ></script>
<script type="text/javascript" src="js/dropload.min.js" ></script>

使用dropload.js

$(function(){
    var paging = 1;//页码数
    // dropload函数接口设置
    $('#content').dropload({
        scrollArea : window,
        // 下拉刷新模块显示内容
        domUp : {
            domClass   : 'dropload-up',
            // 下拉过程显示内容
            domRefresh : '<div class="dropload-refresh">↓下拉过程显示内容-下拉刷新-自定义内容</div>',
            // 下拉到一定程度显示提示内容
            domUpdate  : '<div class="dropload-update">↑释放更新-自定义内容</div>',
            // 释放后显示内容
            domLoad    : '<div class="dropload-load"><span class="loading"></span>加载中-自定义内容...</div>'
        },
        domDown : {
            domClass   : 'dropload-down',
            // 滑动到底部显示内容
            domRefresh : '<div class="dropload-refresh">↑上拉加载更多-自定义内容</div>',
            // 内容加载过程中显示内容
            domLoad    : '<div class="dropload-load"><span class="loading"></span>加载中-自定义内容...</div>',
            // 没有更多内容-显示提示
            domNoData  : '<div class="dropload-noData">暂无数据-自定义内容</div>'
        },
        // 1 . 下拉刷新 回调函数
        loadUpFn : function(me){
            $.ajax({
                type: 'GET',
                // 每次获取最新的数据即可
                url: '',
                dataType: 'json',
                success: function(data){
                    // $.ajax()虽然接口提供json字符串,但接收到的是 json对象
                    var result = '';
                    // 循环拼接显示内容 DOM
                    // 刷新获取多少数据,显示多少 使用html()重置 lists DOM
                    for(var i = 0; i < data.data.length; i++){
                        result +=   '<a class="item opacity" href="'+data.data[i].link+'">'
                                        +'<img src="'+data.data[i].pic+'" alt="">'
                                        +'<h3>hehe</h3>'
                                        +'<span class="date">'+data.data[i].id+'</span>'
                                    +'</a>';
                    }
                    // 为了测试,延迟1秒加载
                    setTimeout(function(){
                        // 插入加载使用 html() 重置 DOM
                        $('.lists').html(result);
                        // 每次数据加载完,必须重置
                        me.resetload();
                    },1000);
                },
                // 加载出错
                error: function(xhr, type){
                    alert('Ajax error!');
                    // 即使加载出错,也得重置
                    me.resetload();
                }
            });
        },
        // 2 . 上拉加载更多 回调函数
        loadDownFn : function(me){
            paging++; // 每次请求,页码加1
            $.ajax({
                type: 'GET',
                url: '',
                dataType: 'json',
                success: function(data){
                    // data = JSON.parse(data);
                    var result = '';
                    // 选择需要显示的数据 拼接 DOM
                    for(var i = 0; i < data.data.length; i++){
                        result +=   '<a class="item opacity" href="'+data.data[i].link+'">'
                                        +'<img src="'+data.data[i].pic+'" alt="">'
                                        +'<h3>heheh</h3>'
                                        +'<span class="date">'+data.data[i].id+'</span>'
                                    +'</a>';
                        if(data.data.length<15){
                            // 再往下已经没有数据
                            // 锁定
                            me.lock();
                            // 显示无数据
                            me.noData();
                            break;
                        }
                    }
                    // 为了测试,延迟1秒加载
                    setTimeout(function(){
                        // 加载 插入到原有 DOM 之后
                        $('.lists').append(result);
                        // 每次数据加载完,必须重置
                        me.resetload();
                    },1000);
                },
                // 加载出错
                error: function(xhr, type){
                    // 即使加载出错,也得重置
                    me.resetload();
                }
            });
        },
        threshold : 50
    });
});

踩坑dropload.js

以前在使用dropload的时候踩过一次坑,时隔一年再次使用dropload的时候仍然踩了一次同样的坑!
页面加载会立即调用dropload的loadDownFn 方法,但是这个时候出现问题了,会一次请求n次接口,把所有的数据请求出来了,是不是想哭了?
经过不断的努力,发现在对#content初始化的时候,#content的高度被我设置成了100%,只需要把这个删掉就好了。

最后

以后使用dropload的时候可能还会遇见各种各样的坑,慢慢更新吧!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个移动端的table表格,并且有上拉加载下拉刷新的功能,你可以使用H5的一些特性,例如`<table>`标签、`<div>`标签、`<ul>`标签、`<li>`标签、CSS3动画、JavaScript等。 以下是一个使用HTML、CSS、JavaScript实现的示例代码: HTML: ```html <!-- table表格容器 --> <div id="table-container"> <!-- 下拉刷新提示 --> <div class="pull-down-refresh"> <span class="loading"></span>下拉刷新 </div> <!-- table表格 --> <table> <thead> <tr> <th>Header 1</th> <th>Header 2</th> <th>Header 3</th> </tr> </thead> <tbody id="table-body"> <tr> <td>Item 1-1</td> <td>Item 1-2</td> <td>Item 1-3</td> </tr> <tr> <td>Item 2-1</td> <td>Item 2-2</td> <td>Item 2-3</td> </tr> <tr> <td>Item 3-1</td> <td>Item 3-2</td> <td>Item 3-3</td> </tr> <!-- 省略更多的表格行 --> </tbody> </table> <!-- 上拉加载提示 --> <div class="pull-up-load"> <span class="loading"></span>上拉加载 </div> </div> ``` CSS: ```css /* table表格容器样式 */ #table-container { height: 100%; overflow-y: auto; } /* 下拉刷新提示样式 */ .pull-down-refresh { height: 50px; line-height: 50px; text-align: center; font-size: 14px; color: #888; position: relative; } .pull-down-refresh .loading { display: inline-block; width: 20px; height: 20px; margin-right: 10px; border-radius: 50%; border: 2px solid #ccc; border-top-color: #07c160; animation: rotate 0.6s linear infinite; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); } @keyframes rotate { from { transform: rotate(0); } to { transform: rotate(360deg); } } /* 上拉加载提示样式 */ .pull-up-load { height: 50px; line-height: 50px; text-align: center; font-size: 14px; color: #888; position: relative; } .pull-up-load .loading { display: inline-block; width: 20px; height: 20px; margin-right: 10px; border-radius: 50%; border: 2px solid #ccc; border-top-color: #07c160; animation: rotate 0.6s linear infinite; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); } ``` JavaScript: ```javascript // 获取table表格 var table = document.querySelector('table'); // 初始化下拉刷新 var startY = 0; // 记录触摸起始位置 var isPullDown = false; // 是否正在下拉刷新 table.addEventListener('touchstart', function(event) { var touch = event.touches[0]; startY = touch.pageY; }, false); table.addEventListener('touchmove', function(event) { if (isPullDown) { return; } var touch = event.touches[0]; var distance = touch.pageY - startY; if (distance > 0 && table.scrollTop == 0) { // 下拉刷新 isPullDown = true; var refresh = document.querySelector('.pull-down-refresh'); var loading = refresh.querySelector('.loading'); loading.style.display = 'inline-block'; refresh.innerHTML = '<span class="loading"></span>正在刷新'; // 模拟加载数据 setTimeout(function() { // 插入新的表格行 var tbody = document.querySelector('#table-body'); var tr = document.createElement('tr'); tr.innerHTML = '<td>New Item 1</td><td>New Item 2</td><td>New Item 3</td>'; tbody.insertBefore(tr, tbody.firstChild); // 结束下拉刷新 loading.style.display = 'none'; refresh.innerHTML = '<span class="loading"></span>下拉刷新'; isPullDown = false; }, 1000); } }, false); // 初始化上拉加载 var isPullUp = false; // 是否正在上拉加载 table.addEventListener('scroll', function(event) { var tbody = document.querySelector('#table-body'); var height = tbody.offsetHeight; var top = table.scrollTop; var clientHeight = table.clientHeight; if (height - top - clientHeight < 50 && !isPullUp) { // 上拉加载 isPullUp = true; var load = document.querySelector('.pull-up-load'); var loading = load.querySelector('.loading'); loading.style.display = 'inline-block'; load.innerHTML = '<span class="loading"></span>正在加载'; // 模拟加载数据 setTimeout(function() { // 插入新的表格行 var tr = document.createElement('tr'); tr.innerHTML = '<td>New Item 1</td><td>New Item 2</td><td>New Item 3</td>'; tbody.appendChild(tr); // 结束上拉加载 loading.style.display = 'none'; load.innerHTML = '<span class="loading"></span>上拉加载'; isPullUp = false; }, 1000); } }, false); ``` 注意:这只是一个简单的示例代码,实际情况可能需要更复杂的代码来满足需求。另外,上拉加载下拉刷新功能需要与后端API接口配合使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值