`
天梯梦
  • 浏览: 13639347 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

滚屏加载--无刷新动态加载数据技术的应用

 
阅读更多

我们浏览有些网页的时候,当拉动浏览器的滚动条时到页底时,页面会继续自动加载更多内容供用户浏览。这种技术我暂且称它为滚屏加载技术。我们发现很多网站用到这种技术,必应图片搜索、新浪微博、QQ空间等将该技术应用得淋漓尽致。

 

滚 屏加载技术,就是使用Javascript监视滚动条的位置,每次当滚动条到达浏览器窗口底部时,触发一个Ajax请求后 台PHP程序,返回相应的数据,并将返回的数据追加到页面底部,从而实现了动态加载,其实就是一个典型的Ajax应用。本文将使用jQuery,结合 PHP,mysql以及JSON,为您讲解如何应用滚屏加载技术到您的项目中去。当然,阅读本文的前提是您需要有jQuery和PHP相关基础。

 

index.php

我们默认要显示15条数据,因此,我们先从数据库取开始的15条数据显示在页面。后面新加载的数据,我们也按每次15条的方式展示。

为了讲解尽量简单,我使用原生的PHP和mysql查询语句。首先,需要连接数据库,包含连接信息的connnect.php。这里我定义了几个用户id。

然后查询数据表,获得结果集,并循环输出,代码如下:

<?php 
require_once('connect.php'); 
$user = array('demo1','demo2','demo3','demo3','demo4'); 
?> 
<div id="container"> 
    <?php 
    $query=mysql_query("select * from say order by id desc limit 0,15"); 
    while ($row=mysql_fetch_array($query)) { 
    ?> 
    <div class="single_item"> 
        <div class="element_head"> 
              <div class="date"><?php echo date('m-d H:i',$row['addtime']);?></div> 
              <div class="author"><?php echo $user[$row['userid']];?></div> 
         </div> 
         <div class="content"><?php echo $row['content'];?></div> 
    </div> 
    <?php } ?> 
 </div>  
<div class="nodata"></div>

 

注:本例使用的数据来源于本站文章:PHP+Mysql+jQuery实现发布微博程序--PHP篇,文中有创建数据表的介绍。

 

jQuery

1、首先,我们要获取浏览器可视区域页面的高度:

var winH = $(window).height();

 

2、然后,当滚动页面的时候需要做的事情是:计算页面总高度(当滚动底部时,页面新加载数据,所以页面总高度是动态变化的),计算滚动条位置(滚动条位置也是随着加载页面的高度动态变化的),然后构造一个公式,计算相对比例。

$(window).scroll(function () { 
    var pageH = $(document.body).height(); //页面总高度 
    var scrollT = $(window).scrollTop(); //滚动条top 
    var aa = (pageH-winH-scrollT)/winH; 
});

 

3、当滚动条接近页底时,触发ajax加载,在本例中我们使用jQuery的getJSON方法,向服务端result.php发送请求,请求的参数为page,即页数。

if(aa<0.02){ 
    $.getJSON("result.php",{page:i},function(json){ 
        ..... 
    }); 
 }

 

4、如果请求响应成功返回JSON数据,则解析JSON数据,并将数据追加到页面DIV#container后,如果没有JSON数据返回,则说明数据全部显示完毕。

if(json){ 
    var str = ""; 
    $.each(json,function(index,array){ //遍历 
        var str = "..."; //获取的JSON数据 
        $("#container").append(str); //追加 
    }); 
    i++;  //页数+1 
}else{ 
    $(".nodata").show().html("别滚动了,已经到底了。。。"); 
    return false; 
}

 

完整的jQuery代码如下:

$(function(){ 
    var winH = $(window).height(); //页面可视区域高度 
    var i = 1; //设置当前页数 
    $(window).scroll(function () { 
        var pageH = $(document.body).height(); 
        var scrollT = $(window).scrollTop(); //滚动条top 
        var aa = (pageH-winH-scrollT)/winH; 
        if(aa<0.02){ 
            $.getJSON("result.php",{page:i},function(json){ 
                if(json){ 
                    var str = ""; 
                    $.each(json,function(index,array){ 
                        var str = "<div class=\"single_item\"><div class=\"element_head\">"; 
                        var str += "<div class=\"date\">"+array['date']+"</div>"; 
                        var str += "<div class=\"author\">"+array['author']+"</div>"; 
                        var str += "</div><div class=\"content\">"+array['content']+"</div></div>"; 
                        $("#container").append(str); 
                    }); 
                    i++; 
                }else{ 
                    $(".nodata").show().html("别滚动了,已经到底了。。。"); 
                    return false; 
                } 
            }); 
        } 
    }); 
});

 

 

result.php

当滚动到页面底部时,前端Ajax请求到result.php,该后台程序将根据请求的数据页数:page,查询数据表中对应的记录,并将记录集以json的格式输出返回给前端处理。

require_once('connect.php'); //连接数据库 
 
$user = array('demo1','demo2','demo3','demo3','demo4'); 
$page = intval($_GET['page']);  //获取请求的页数 
$start = $page*15; 
$query=mysql_query("select * from say order by id desc limit $start,15"); 
while ($row=mysql_fetch_array($query)) { 
    $arr[] = array( 
        'content'=>$row['content'], 
        'author'=>$user[$row['userid']], 
        'date'=>date('m-d H:i',$row['addtime']) 
    ); 
} 
echo json_encode($arr);  //转换为json数据输出

 

 

好了,本文的介绍到此结束,快去看看效果吧。当然还有一种方式是通过点击页面的链接按钮来加载更多数据,本站前面有文章专门介绍过,有兴趣的同学可以去看下:jQuery+PHP实现浏览更多内容,你还可以结合前面几篇文章介绍砌墙效果和图片延迟加载技术,完善项目中的用户体验。helloweba感谢您的关注。

 
justcode.ikeepstudying.com
分享到:
评论

相关推荐

    jQuery滚屏加载_Ajax滚屏加载

    这种技术我暂且称它为jQuery+Ajax无刷新滚屏加载技术。我们发现图片搜索、新浪微博、QQ空间等将该技术应用得淋漓尽致。 若是想看该网页特效教程 http://www.sucaihuo.com/js/9.html,滚动条下拉到最后,还可以查看...

    php+ajax实现无刷新动态加载数据技术

    无刷新功能我们用到很多很多的,下面我就来给各位介绍一个实例,就是实现php+ajax实现无刷新滚屏加载数据,例子非常的简单大家只要按流程来操作就可以了哦。

    PHP+jQuery实现滚屏无刷新动态加载数据功能详解

    主要介绍了PHP+jQuery实现滚屏无刷新动态加载数据功能,涉及php动态读取数据库及加载数据实现滚屏无刷新效果的具体操作技巧,需要的朋友可以参考下

    thinkphp框架基于ajax,js的滚屏加载技术demo

    初学php,基于ajax,js用thinkphp做的拉下滚动条到底部时,无刷新加载数据库内容,很简单的数据库,就一条记录,简单的加载,并在引动段也测试过可用.此应用代码有一个小前提,就是默认页面原有的内容量够多,是页面存在滚动...

    无刷新动态加载数据 滚动条加载适合评论等页面

    无刷新动态加载数据,滚屏加载更多数据,适合评论等页面,具体实现如下,感兴趣的朋友可以参考下

    flex3的cookbook书籍完整版dpf(包含目录)

    在DataGrid中搜索并自动滚屏到匹配项 6.11节. 使用GroupingCollection生成数据汇总 6.12节. 为GroupingCollection创建异步刷新 第七章:渲染器和编辑器(215) 7.1节.创建自己的渲染器 7.2 节. 使用ClassFactory ...

    500多个html网页格式的各种源代码

    1.19 在网页中动态添加Script脚本.htm 1.20 用JavaScript随机修改页面的标题.htm 1.21 判断网页加载完毕.htm 1.22 嵌入网页的播放器.htm 1.23 设置指定网页为主页.htm 1.24 使用JavaScript传递页面参数.htm ...

    JavaScript网页特效范例宝典源码

    实例043 应用JavaScript实现指定尺寸无边框无滚动条窗口 67 1.8 水平导航条应用 69 实例044 图片按钮导航条 69 实例045 导航条的动画效果 71 实例046 不用图片实现质感导航条 72 1.9 下拉菜单式导航条 73 实例047 二...

    手机 pdf 阅读器

    增加一种新的滚屏方式:波浪,同时,阅读时3键不再使用默认的像素滚屏,而会使用最后一次使用的滚屏方式 任何可用的外置字库都可以作为内置字库存在,在jar包中存在dot.font会被当为内置字库加载 加快大文件的打开...

    javaScript实例自学手册486例,附带目录可方便搜索

    1.21 判断网页加载完毕.htm 1.22 嵌入网页的播放器.htm 1.23 设置指定网页为主页.htm 1.24 使用JavaScript传递页面参数.htm 1.25 页面被冻结.htm 1.26 页面的地震效果.htm 1.28 页面逐渐缩小.htm 1.29 页内...

    一套微信小程序插件集合库.zip

    一套微信小程序插件集合库,非常强大,开发小程序必用,里面有许多效果,比如大转盘,日历,滚屏,星星评分,瀑布,tab切换,扇形倒计时,焦点图,下拉刷新上拉加载,表单校验,无缝滚动,复选框全选,刮刮卡,圆形...

    《JavaScript实例精通》[源代码]

    16_1.htm 无刷新实现图片切换。 16_2.htm 很酷的导航特效。 16_3.htm 加载一个文本文件到一个HTML元素中。 16_4.htm 使用XML HTTP载入一个XML文件。 16_5.htm 通过XML HTTP做一个HEAD的请求。 16_6.htm ...

    JavaScript实例精通

    16_1.htm 无刷新实现图片切换。 16_2.htm 很酷的导航特效。 16_3.htm 加载一个文本文件到一个HTML元素中。 16_4.htm 使用XML HTTP载入一个XML文件。 16_5.htm 通过XML HTTP做一个HEAD的请求。 16_6.htm ...

    多媒体教室

    多媒体网络教室经过严格的软、硬件测试过程,全面支持 Windows 系列操作系统,包括 Windows 9X、Windows Me、Windows NT 4.0、Windows 2000、Windows XP以及 Windows RPL/PXE 无盘工作站,支持跨网段校园网教学,对...

Global site tag (gtag.js) - Google Analytics