mui-上拉加载和下拉刷新

614 阅读1分钟

引入的库都是使用cdn外链,所以可以直接新建文件测试使用

<!DOCTYPE html>

<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>mui上拉加载和下拉刷新</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/mui/3.7.1/css/mui.min.css">
    <script src="https://cdn.staticfile.org/mui/3.7.1/js/mui.min.js"></script>
    <script src="https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js"></script>
    <script src="https://cdn.staticfile.org/Mock.js/1.0.1-beta3/mock.js"></script>
    <style>
        /* 解决web调试报错 [Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. See <URL> */

        * {

            touch-action: pan-y;

        }
    </style>

</head>



<body>

    <div id="refreshContainer" class="mui-content mui-scroll-wrapper">
        <div class="mui-scroll">
            <p>如果加载内容的元素上面有其他元素,可以加在这里</p>
            <ul id="content">
                <!-- 数据加载元素-->
            </ul>
        </div>
    </div>

    <script>
        let count = 0  //页码
        let data = []  //展示的数据
        // 模拟后台/user/userInfo接口返回值
        Mock.mock('/user/userInfo', '@range(1, 13)')

        function getData(type) {
            // 如果执行的是下拉的回调,那么就清空数据
            if (type == 'down') {
                count = 0
                data = []
            }
            // 获取后台数据
            $.ajax({
                url: '/user/userInfo',
                // dataType: 'json',
                success: (res) => {
                    res = JSON.parse(res)
                    data = [...data, ...res]
                    console.log('当前数据', data);
                    // 遍历使得数据追加到内容容器里
                    for (let i = 0; i < res.length; i++) {
                        let li = document.createElement('li')
                        li.innerText = res[i]
                        li.style.cssText = "height:50px;border:1px solid yellow;";
                        console.log(li);
                        console.log(document.querySelector('#content'));
                        document.querySelector('#content').appendChild(li)
                    }

                    if (type == 'down') {
                        // 数据展示完后结束下拉
                        mui('#refreshContainer').pullRefresh().endPulldownToRefresh();
                    } else {
                        // 如果是上拉并且不超过 3 页数据时候继续加载
                        count++
                    }
                    mui('#refreshContainer').pullRefresh().endPullupToRefresh();
                    // 数据大于 3 页的时候,数据已经加载完了,所以停止加载
                    if (count > 3) {
                        this.endPullupToRefresh(true);
                        // 显示没有更多了提示文字
                        let li = document.createElement('li')
                        li.innerText = '没有更多数据了'
                        document.querySelector('#content').appendChild(li)
                    }

                }



            })
        }


        //上拉加载
        mui('#refreshContainer').pullRefresh({
            container: '#refreshContainer',//待刷新区域标识,querySelector能定位的css选择器均可,比如:id、.class等
            up: {
                height: 50,//可选.默认50.触发上拉加载拖动距离
                auto: false,//可选,默认false.自动上拉加载一次
                contentrefresh: "正在加载...",//可选,正在加载状态时,上拉加载控件上显示的标题内容
                contentnomore: '没有更多数据了',//可选,请求完毕若没有更多数据时显示的提醒内容;默认显示位置在顶部
                callback: getData //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
            },

            down: {
                height: 10, //可选,默认50.触发下拉刷新拖动距离,
                auto: true, //可选,默认false.首次加载自动下拉刷新一次
                contentdown: "下拉可以刷新", //可选,在下拉可刷新状态时,下拉刷新控件上显示的标题内容
                contentover: "释放立即刷新", //可选,在释放可刷新状态时,下拉刷新控件上显示的标题内容
                contentrefresh: "正在刷新...", //可选,正在刷新状态时,下拉刷新控件上显示的标题内容
                callback: function () {
                    document.querySelector('#content').innerHTML = ''
                    getData('down')
                }
            }

        });

    </script>

</body>



</html>