H5在微信公众号的下拉刷新实现

转载自:http://blog.csdn.net/zl544434558/article/details/50401832

由于项目需要在微信公众号做“健康资讯”相关的,所以会用到下拉刷新,可是使用的原生H5做页面,不过希望能够做到和app原生一样的下拉刷新效果,然后在网上找了找H5下拉刷新相关的资料,具体有:Iscroll,MUI,Hook.js,dragloader 等,它们宣称都可以很好的解决下拉刷新的问题,但是我查看的具体的官网文档和例子后,我还是选择了Iscroll作为本次的下拉刷新实现,因为其它的技术要么文档写的不好,要么例子实现太少,而iscroll的例子却很多。
下面是我从项目里面把下拉刷新的模块扒出来的,把实现的效果分享一下 。
具体实现代码思路是:页面的列表展示通过后台返回的json数组,然后遍历json数组通过js添加列表。每次向下刷新后类似点击分页“下一页”,具体代码如下:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<title>健康资讯</title>
<script src="jquery.min.js"/></script>
<script type="text/javascript" src="iscroll.js"></script>
<link rel="stylesheet" type="text/css" href="bookBase.css" />

<!--start-->
<style>
    html, body{ background-color: #fff;}
    .m-img-font-box{}
    .m-img-font-box a.link{ display: block; border-bottom: 1px solid #ccc;}
    .m-img-font-box a.link dl{ padding: 5px 10px; height: 50px; overflow: hidden;}
    .m-img-font-box a.link dl dt{ width: 60px; height: 60px; float: left;}
    .m-img-font-box a.link dl dt img{ width: 100%; height: 82%;}
    .m-img-font-box a.link dl dd{ margin-left: 65px; padding-top: 1px;}
    .m-img-font-box a.link dl dd p{ font-size: 16px;  color: #bbb;}
    .m-img-font-box a.link dl dd p.title{ font-size: 16px; color: #464646;  width: 91%; overflow: hidden; text-overflow:ellipsis; white-space:nowrap;}
    .m-img-font-box a.link dl dd p.font{ width: 98%; overflow: hidden; text-overflow:ellipsis; white-space:nowrap;  font-size: 14px;}

    h3{ font-size: 13px; font-weight: normal; padding: 5px 10px;}
#wrapper {
    position:absolute; z-index:1;
    top:30px; bottom:0; left:-9999px;
    width:100%;
    background:#FFF;
    overflow:auto;
}

#scroller {
    position:absolute; z-index:1;
    -webkit-tap-highlight-color:rgba(0,0,0,0);
    width:100%;
    padding:0;
}

#pullUp {
    background:#fff;
    height:40px;
    line-height:40px;
    padding:5px 10px;
    border-bottom:1px solid #ccc;
    font-weight:bold;
    font-size:14px;
    color:#888;
} 

 #pullUp.loading .pullUpLabel {
    background:url(../images/loading/loading.gif) no-repeat center 0;
    width: 100%;
    height: 30px;
    align:center;
    background-size: auto 100%; 
}

</style>


<script type="text/javascript">

var myScroll,

    pullUpEl, pullUpOffset,
    generatedCount = 0;

var currenPage = 0;     var pageSize = 3;

function pullUpAction () {
        currenPage ++;

    var elInit = $("#thelist");

    var param = {"currentPage":currenPage,"pageSize":pageSize};
 $.ajax({
               url:"result.json", //后台处理程序
               type:'post',         //数据发送方式
               dataType: 'json',
               data:param,
               async: true,
               success:function(data){
                   var result = "" ;
                   $(data).each(function(){
                       var checker = $(this)[0];
                    result += "<div class='mfb'><a class='link' href='"+checker.url+"'>"+
                              "<dl><dt><img src='"+checker.icon+"'/> </dt>"+
                              "<dd><p class='title'>"+checker.title+"</p>"+
                              "<p class='title'>"+checker.subTitle+"</p>"+
                              "</dd></dl></a></div>";
                      });

                   elInit.append(result);
                     myScroll.refresh();

               }
            }); 


}

function loaded() {


    pullUpEl = document.getElementById('pullUp');
    if(pullUpEl != null){
        pullUpOffset = pullUpEl.offsetHeight;
    }else{
        pullUpOffset = 0;
    }

    myScroll = new iScroll('wrapper', {
        useTransition: true,
        onRefresh: function () {
            if (pullUpEl.className.match('loading')) {
                pullUpEl.className = '';
                $(pullUpEl).css("display", "none");
                pullUpEl.querySelector('.pullUpLabel').innerHTML = 'Pull up to load more...';
            }
        },
        onScrollMove: function () {
             if (this.y < (this.maxScrollY - 5) && !pullUpEl.className.match('flip')) {
                pullUpEl.className = 'flip';
                $(pullUpEl).css("display","");
                pullUpEl.querySelector('.pullUpLabel').innerHTML = '松开载入更多..';
                this.maxScrollY = this.maxScrollY;
            } else if (this.y > (this.maxScrollY + 5) && pullUpEl.className.match('flip')) {
                pullUpEl.className = '';
                pullUpEl.querySelector('.pullUpLabel').innerHTML = 'Pull up to load more...';
                this.maxScrollY = pullUpOffset;
            }
        },
        onScrollEnd: function () {
            if (pullUpEl.className.match('flip')) {
                pullUpEl.className = 'loading';
                $(pullUpEl).css("display","");
                pullUpEl.querySelector('.pullUpLabel').innerHTML = '';              
                pullUpAction(); // Execute custom function (ajax call?)
            }
        }

    });


 document.getElementById('wrapper').style.left = '0'; 
 }

document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);

document.addEventListener('DOMContentLoaded', function () { setTimeout(loaded, 200); }, false);

//页面加载完成后,向后台请求数据
$(function(){
    pullUpAction();

});
</script>



</style>
</head>
<body>
    <h3>资讯列表</h3>
    <div class="cm-container-box" id="wrapper">
        <div class="cm-table"  id="scroller">
            <div class="m-img-font-box" id="thelist">

            </div>

                <div id="pullUp" style="display:none; text-align: center;">
                    <span class="pullUpLabel"></span>
                </div>

            </div>
    </div>


</body>
</html>

完整demo下载地址:http://download.csdn.net/download/zl544434558/9376562

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在uniapp中开发H5登录微信公众号并进行联调,有以下几个步骤: 1. 获取微信开发者账号和相关配置信息:首先需要在微信开放平台注册并创建一个开发者账号,然后创建一个微信公众号,并获取相应的AppID和AppSecret等配置信息。 2. 在uniapp项目中配置相关插件:在uniapp项目的manifest.json文件中,添加对应的插件配置,如"@dcloudio/uni-mp-weixin"插件。然后在项目的App.vue中通过uni.login方法获取登录凭证code,并调用uni.request方法发送请求到服务器获取用户的openid和session_key。 3. 前端与后端的联调:根据服务器返回的用户openid和session_key,在前端进行相关的业务逻辑处理,如展示用户信息、跳转到其他页面等。其中,服务器端需要处理用户的登录请求,并返回openid和session_key等信息给前端。 4. 微信公众号授权设置:在微信公众号后台设置中,配置网页授权域名和回调地址,并将uniapp项目的H5链接添加到公众号菜单中。 5. 测试和调试:完成以上步骤后,进行测试和调试,确保登录功能在H5中正常使用。可以通过调试工具、日志打印等方式进行定位和解决问题。 总结:在uniapp开发H5登录微信公众号的联调过程中,需要进行微信开发者账号和相关配置的准备,配置相关插件和设置,前端与后端的联调,以及进行测试和调试。通过这些步骤,可以实现在uniapp项目中登录微信公众号并进行H5联调。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值