MUI踩坑记录——上拉加载后隐藏“没有更多了”

这篇博客记录了在使用MUI框架开发H5-app时遇到的问题,即上拉加载完成后,'没有更多了'提示无法自动隐藏。作者尝试了设置display:none,但滚动条并未随之正常上滑。最终通过CSS动画实现动态隐藏,通过修改translate3d的y轴属性,使列表容器上下移动,成功解决问题。同时,作者提到mui.scrollTo()方法在这个场景下未达到预期效果。

需求:

新闻中心页面,新闻以垂直列表展示,要求上拉动态加载新数据。当有新数据时加载数据并显示;当没有新数据时,提示“没有更多了”,并且在1s后消失。

解决方法:

使用MUI上拉加载控件:

mui.init({
//说明见官方文档
  pullRefresh : {
    container:'body',
    up : {
      height:50,
      auto:false,
      contentrefresh : "正在加载...",
      contentnomore:'没有更多数据了',
      callback :moreNews 
    }
  }
});

function moreNews(){
    //count初始化为0,只加载一次新数据
    if(count===0){
        console.log("上拉加载触发");
        count++;
        var i=0;
        while(i++<4){
            //newsString中存放字符串格式的节点,循环添加4次
            $("#news-list").append(newsString);
        }
        this.endPullupToRefresh(false);
    }else{
        //提示没有更多了
        this.endPullupToRefresh(true);  
        setTimeout(function(){
            //1s后提示性文字消失
            //这里的类是mui自己添加的一个div,用来显示提示性文字。
            $(".mui-pull-bottom-pocket").addClass("hide");
        },1000);
    }
}
//css 隐藏样式
//这里注意优先级,因为mui会给提示的div添加一个优先级很高的display:block
#news-container .hide {
    display: none !important;
} 

问题:

虽然我们设置了display:none;提示也消失了,但是滚动条并没有动态上滑,而在手动滑动一次后才会正常显示。
bug

最终方法

(1) 修改需求
我参考了很多app后,发现要么是无限数据滑不到底,要么就是不隐藏,保留提示。所以如果我第二个方法不适用的话,可以尝试修改需求。
(2) css动画
这个方法不好叙述,只能将我的思路展示一下:
html
这是列表容器的html节点。style是mui自动添加的。translate3d的y轴属性是一个随屏幕滑动而动态变化的值,也就是容器顶部距离当前可见区域的距离。通过修改这个值可以让容器上下移动。可以自己在浏览器中调试、修改,观察效果。
所以,思路就是获取到这个值,然后修改样式。
修改原有代码:

//获取容器对象
var container = $("#news-container");
//这里打印了一个很神奇的字符串,可以体验一下。
console.log(container.css("transform"));
//获取y轴属性值,不要奇怪要为什么这么处理字符串
                        var height = container.css("transform").split(',')[5].replace(')','');
//因为height是负值,所以要加40px,即提示div的高度
                        var delta = parseInt(height)+40;
                        var string = "translate3d(0px, "+delta+"px, 0px) translateZ(0px)";
//设置样式
                        container.css("transform",string);

现在问题应该解决了。获得y轴属性值的方式很奇怪,也不是我刻意为之,而是获得的字符串就很奇怪。
(3)mui.scrollTo()方法
这个方法不管用。也不知道为什么,scrollTop()获取到的值永远是0。所以,滚动条在移动端的适配并不是看上去那么美好。

总结

MUI的坑我相信远不仅仅这一处,以后我遇到还会记录下来,希望更多的人不要像我一样,遇到bug找不到官方解决方法,只能靠偶然间的灵感。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值