mui 上拉加载更多的使用

Posted bllx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mui 上拉加载更多的使用相关的知识,希望对你有一定的参考价值。

最近工作之余在用mui的框架开发,对mui了解了一些。在真正的app开发项目中,mui上拉加载模块中有两个坑,现在说一下。

1、在函数自己上拉加载行为后的回调函数

该函数是必须要写的,用来写自己的逻辑需求,但是一般情况下,需要设置显示为“加载更多”还是“没有更多数据了”。

看了一些博客和官方文档,基本上都把这个设置放在了定时器中

在定时器中调用获取数据的方法(自己的业务需求)

2、在mui封装的上拉加载中,点击某一项会失效。这个是真的很坑。不过网上也有解决方法。就是采用事件监听的方式,阻止默认行为

mui(‘选择器‘).on(‘tap‘,‘选择器‘,function(e){
     e.preventDefault();
    //自己的业务逻辑
})

一开始我将上述代码放在了mui.plusready()函数里面,可是事件并没有触发,所以,当我将它mui.plusready()中拿出来,事件就起作用了,我并不知道这是为什么,如果你偶尔看到这篇文章,可以告诉我一下。

我将这个使用demo放在了自己的gitHub上,网址:https://github.com/dreamITGirl/projectStudy/blob/master/html/mui%E4%B8%8A%E6%8B%89%E5%8A%A0%E8%BD%BD.html

在博客中也贴一下代码

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0"/>
    <script>
        window.onload = function () {
            /*750代表设计师给的设计稿的宽度,你的设计稿是多少,就写多少;100代表换算比例,这里写100是
             为了以后好算,比如,你测量的一个宽度是100px,就可以写为1rem,以及1px=0.01rem等等*/
            getRem(750, 100)
        };
        window.onresize = function () {
            getRem(750, 100)
        };
        function getRem(pwidth, prem) {
            var html = document.getElementsByTagName("html")[0];
            var oWidth = document.body.clientWidth || document.documentElement.clientWidth;
            html.style.fontSize = oWidth / pwidth * prem + "px";
        }
    </script>
    <link rel="stylesheet" href="../css/mui.min.css"/>
    <link rel="stylesheet" href="../css/reset.css"/>
    <title>关于mui的上拉加载</title>
    <style>
        .mui-content {
            background: #fff;
        }

        h2 {
            font-size: 0.28rem;
            line-height: .6rem;
            padding-left: 10px;
        }

        .mui-scroll-wrapper {
            top: .75rem;
        }
    </style>
</head>
<body>
<div class="mui-content">
    <h2>上拉加载</h2>

    <div class="mui-scroll-wrapper" id="pullRefresh">
        <div class="mui-scroll">
            <ul class="mui-table-view" id="listContainer">
                <li class="mui-table-view-cell">
                    list1
                </li>
                <li class="mui-table-view-cell">
                    list2
                </li>
                <li class="mui-table-view-cell">
                    list3
                </li>
                <li class="mui-table-view-cell">
                    list4
                </li>
            </ul>
        </div>
    </div>
</div>

<script src="../js/jquery-2.1.3.min.js"></script>
<script src="../js/mui.min.js"></script>

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

        function pullfreshFunc() {
            setTimeout(function () {
                mui(#pullRefresh).pullRefresh().endPullupToRefresh(flag);//参数为true代表没有更多数据了。
                getData();
            }, 500);

        }

        function getData() {
            mui.ajax({
                type: get,
                url: ../json/data.json,
                data: {counter: counter},
                success: function (response) {
                    console.log(response);
                    let list = response.peopleList;

                    let html = "";
                    flag = !(list[0] == null || list[0] == "" || !list[0]);

                    if (flag) {
                        counter++;
                    }
                    for (let i = 0; i < list.length; i++) {
                        html += <li class="mui-table-view-cell"> + list[i].name + </li>;
                    }
                    jQuery(#listContainer).append(html)

                },
                error: function (error) {
                    console.log(error)
                }
            })
        }

        //点击单项事件
//        mui中上拉加载中的坑1:点击事件失效(不需要放在mui.plusReady()中)
        mui(#pullRefresh).on(tap, li.mui-table-view-cell, function (e) {
            e.preventDefault();
            console.log(触发点击事件了)
        })
    }(mui, document))
</script>
</body>
</html>

 

以上是关于mui 上拉加载更多的使用的主要内容,如果未能解决你的问题,请参考以下文章

上拉加载实现

使用MUI框架,模拟手机端的下拉刷新,上拉加载操作。

MUI - 上拉加载不执行

为啥使用mui的上拉刷新下拉加载后在电脑上的刷新加载正常手机上就不正常了

iOS 下拉刷新和上拉加载更多效果原理

mui 框架中结合mui.ajax实现 下拉刷新和上拉加载功能