利用mui做类似微信聊天历史记录的加载(下拉加载更多,加载之后页面回到加载之前的位置,以及解决mui双滚动条的问题)

html:
<div class="tmsg-content">
    <div id="t-msg" class=" mui-scroll-wrapper" data-scroll = "1">
        <div class="mui-scroll">
            <ul id='msgList' class="mui-scroll mui-table-view msg-list content-padding mui-table-view-chevron">
            </ul>
        </div>
    </div>
</div>

js:

function pullRefresh(){
    mui("#pullRefresh").pullRefresh({
        indicators: true, //是否显示滚动条
        deceleration:deceleration, //阻尼系数,系数越小滑动越灵敏
        bounce: true, //是否启用回弹
        down:{
            auto: true,
            height:50,
            contentrefresh : "",//可选,正在加载状态时,上拉加载控件上显示的标题内容
            contentnomore:'',//可选,请求完毕若没有更多数据时显示的提醒内容;
            callback:function(){//必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
                window.setTimeout(function(){
                    if(total === 0) {
                        getListDataFromNet();
                    }else if(currentTotal < total){
                        getListDataFromNet();
                    }
                    mui('#pullRefresh').pullRefresh().endPulldownToRefresh(true);
                },500);
            }
        }
    })
}
//获取数据
function getListDataFromNet() {
    mui.post('/url',
        {
            pageNum: NUM,
            pageSize: size,
            ...
        },
        function (curPageData) {
            if (!curPageData.success) {
            }
            else {
                ...
               //微信的加载是加载到当前消息之前,但是页面不会滚动。我的做法是,将加载完成后的页面迅速滚动到加载之前的位置,基本上能达到微信的效果。
                newH = ui.areaMsgList.offsetHeight; //数据加载之后的页面
                scrollH = newH - oldH;
                mui('#t-msg').pullRefresh().reLayout(); 
                mui('#t-msg').pullRefresh().scrollTo(0, -scrollH + 25, 100); //这里我加25是因为我想像微信一样把新的消息显示半条出来,提示用户新消息加载成功了
                oldH = ui.areaMsgList.offsetHeight;//更新页面初始高度
            }
        }, 'json'
    );
}

//关于双滚动条的问题,也是纠结了我不少时间,然后我就去研究源代码。后来发现,加了data-scroll = "1"之后就好了。还有就是不要重新定义滚动了,例如:var scroll = mui("#pullRefresh").scroll();这样是不可行的。如果有遇到双滚动条的问题,不妨试试,我就是这样解决的,现在用着很流畅。


版权声明:本文为Ustupid741原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。