js实现H5下拉刷新

随着web app这个词语的出世以来,在native app中内嵌 web app的案例是越来越多,很多功能都开始由web app来代替native app,那么都是些什么功能呢?
在一些辅助功能上,比如订单的查询等,用户操作不是很复杂的情况下,内嵌web app是比较好的一个选择,能够减少成本,而且还能大大地减少工作量。

这里,我介绍的是H5的下拉刷新功能。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>下拉刷新</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0,user-scalable=no" />
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">

<meta content="telephone=no" name="format-detection">
<link rel="stylesheet" type="text/css" href="details.css" />
<script type="text/javascript" language="javascript" src="jquery-3.0.0.min.js"></script>

</head>
<body>

<script>
$(function(){
        function  DataRequest(){
            var page = $("#page").val()
            var userId = parseInt($("#userId").val());      
            $.ajax({    
                type: "post",
                url: "getData.php",
                data: {
                    userId:userId,
                    page : page
                },
                dataType : "json",          
                success: function(res){
                    var hml=''; 
                    for(var i=0;i<res.length;i++){
                        hml +='<li id='+res[i]['orderId']+'> <span><label>缴纳单号(订单号:'+res[i]['orderNo']+')</label><label class="qgraycolor">'+res[i]['receiveTime']+'</label></span> <em class="plus">'+res[i]['realTotalMoney']+'</em></li>';
                    }
                    $('#ulUnjx').append(hml);
                
                    var pa = parseInt(page)+1;
                    $("#page").val(pa);
                    if(res.length<10){
                        $("#query").val(1);
                    }else{
                        $("#query").val(0);
                    }   
                },
                error: function(){
                    alert('数据查询出错!');
                }    
            });
        }   
        /*
         *给动态生成的li进行绑定点击事件
         */
        $("#ulUnjx").on("click","li", function() {
            location.href ="http://www.baidu.com";
        });
        
        $(window).scroll(function(){    
        
            var is_ctnue =$("#query").val();
            var viewH =$(window).height();//可见高度
            var contentH =$(document).height();//内容高度
            var scrollTop =$(window).scrollTop();//滚动高度
            if($("#page").val()>$("#end").val()){
                return;
            }
            if((contentH - viewH - scrollTop <= 0) && (is_ctnue == 0)) {
                DataRequest();
            }
        });     
        DataRequest();  
        
});
function getLocalTime(time) { 
        var time = new Date(time*1000);
        var y  = judge(time.getFullYear());
        var m = judge(time.getMonth()+1);
        var d  = judge(time.getDate());
        var h  = judge(time.getHours());
        var i   = judge(time.getMinutes());
        var s  = judge(time.getSeconds());
        return y+'-'+m+'-'+d+' '+h+':'+i+':'+s;
} 

function judge(time){
    if(parseInt(time)<10){
        return '0'+time;
    }
        return time;
}
</script>

<div class="main">
<div class="header"><a href="javascript:;" onclick="javascript:JavaScriptTo.onFinish();" class="history"></a>未缴纳费用</div>

 <div class="total"><span>合计</span><em>¥{$res1.sum}</em></div>
 <div class="bandpdetails">
  <ul id="ulUnjx">
  </ul>
 </div>
</div>
    <input id='end' type='hidden' value='{$count}'>
    <input id='page' type='hidden' value='1'>
    <input id='query' type='hidden' value='0'>
    <input id='userId' type='hidden' value='{$userId}'>
</body>
</html>

相应的css代码

.total{ width:100%; background:#fff; height:3.6rem; line-height:3.6rem; padding:0 0.8rem; border-bottom:1px solid #eee; }
.total span{ font-size:1.3rem; color:#333; float:left; display:inline-block; text-align:left;font-weight:600;}
.total em{ display:inline-block; float:right; text-align:right; color:#ff704f; font-size:1.3rem;font-weight:600;}

后端使用的是php代码,这里就不附上去了。

原理 : 用户手动进行了滚动条的下拉,让js捕捉到这个滚动事件,再通过dataRequest这个函数实现ajax数据的加载。

$(window).scroll(function(){    
        var is_ctnue =$("#query").val();
        var viewH =$(window).height();//可见高度
        var contentH =$(document).height();//内容高度
            var scrollTop =$(window).scrollTop();//滚动高度
        if($("#page").val()>$("#end").val()){
            return;
        }
        if((contentH - viewH - scrollTop <= 0) && (is_ctnue == 0)) {
            DataRequest();
        }
});

以上这段代码就是捕捉滚动事件的代码,每滚动一次滚动条,js就能通过$(window).scroll给捕捉到,再通过viewH 、contentH、scrollTop 判断滚动条是否已经到达底部来使DataRequest函数执行。

if($("#page").val()>$("#end").val()){
    return;
}

上面这段代码,主要是判断是否加载结束。

$("#end").val() 是数据的总页数,这个是由后端php程序传到前端的。
$("#page").val() 这个是当前数据的页数,由js进行控制。
is_ctnue 变量也是判断数据是否加载结束,不过这个和页数的判断有点不同。

看看上面附上的代码中,有一段这样的代码:

 if(res.length<10){
        $("#query").val(1);
}else{
        $("#query").val(0);
}  

这里的10表示每页有10条数据,当从后端传回前端的数据中,小于了10条数据,说明数据不够传递了,也就是表示数据已全部加载成功,不需要再下拉刷新了,再通过对input标签的赋值(这个值就是 is_ctnue变量的来源)
来结束加载。

再把加载的数据放入到ul标签中,也就是上面的那个append函数。

 $('#ulUnjx').append(hml);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,907评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,068评论 4 62
  • 不能坚持是最大问题,害怕困难是症结所在,急于求成是一切的阻力。改改吧!
    日落荷栖阅读 322评论 0 0
  • 1、不好好聊天的人 不想聊天,就别加好友,浪费我微信内存。 昨天清理了下朋友圈,原本六百多个好友,清理完,只剩下一...
    李翊轩言阅读 630评论 2 0
  • “先把书包扔过去” 1 一个故事是这样:“翻墙之前,先把书包扔过去,你自然就会想办法跳过去” 我个人的版本是:“小...
    徐舒行阅读 1,311评论 0 0