码迷,mamicode.com
首页 > 其他好文 > 详细

滚屏无刷新动态加载数据

时间:2016-07-16 00:43:52      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

  我们经常会见到滚动条滑动到底部时会自动加载数据,比如QQ空间的查看动态。下面就用一个简单的Demo来实现

  1、首先建一个html文件,代码如下

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6     <style type="text/css">
 7         body {
 8             width: 280px;
 9             margin: auto;
10         }
11 
12         .container {
13             margin: auto;
14             margin-top: 10px;
15         }
16 
17         .single_item {
18             width: 500px;
19             height: 100px;
20             border: 1px solid #ccc;
21         }
22 
23         .nodata {
24             display: none;
25             height: 32px;
26             line-height: 32px;
27             text-align: center;
28             color: #999;
29             font-size: 14px;
30         }
31     </style>
32     <script src="jquery-1.10.2.js"></script>
33     <script type="text/javascript">
34         //isLoadComplete:防止没有数据了还请求
35         var pi = 0, ps = 10, isLoadComplete = false;
36         $(function () {
37             loadData();  //加载
38             var winHeight = $(window).height(); //浏览器当前窗口可视区域高度
39             $(window).scroll(function () {
40                 var pageHeight = $(document.body).height(); //浏览器当前窗口文档body的高度
41                 var scrollTop = $(window).scrollTop(); //滚动条top
42                 var res = (pageHeight - winHeight - scrollTop) / winHeight;
43                 if (res < 0) {
44                     loadData();
45                 }
46             });
47         });
48         function loadData() {
49             if (isLoadComplete)
50                 return;
51             pi++;
52             $.post("/handler.ashx", { pageIndex: pi, pageSize: ps }, function (dataObj) {
53                 if (dataObj && dataObj.length > 0) {
54                     var htmlStr = ‘‘;
55                     for (var i = 0; i < dataObj.length; i++) {
56                         htmlStr += "<div class=‘single_item‘>" + dataObj[i] + "</div>";
57                     }
58                     $("#container").append(htmlStr);
59                 } else {
60                     isLoadComplete = true;
61                     $(".nodata").show().html("全部数据加载完毕。。。");
62                 }
63             }, "json");
64         }
65     </script>
66 </head>
67 <body>
68     <div class="container" id="container">
69         <!--<div class="single_item">
70             第1个数据
71         </div>-->
72     </div>
73     <div class="nodata"></div>
74 </body>
75 </html>

  2、后台是使用的一般处理程序(ashx),代码如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Script.Serialization;
 6 
 7 namespace Demo
 8 {
 9     /// <summary>
10     /// Handler 的摘要说明
11     /// </summary>
12     public class Handler : IHttpHandler
13     {
14         public void ProcessRequest(HttpContext context)
15         {
16             //不做验证了
17             var pi = Convert.ToInt32(context.Request.Form["pageIndex"]);
18             var ps = Convert.ToInt32(context.Request.Form["pageSize"]);
19             List<string> list = new List<string>();
20             //到第4页停止(模拟没有数据)
21             if (pi < 4)
22             {
23                 //模拟数据
24                 for (int i = (pi - 1) * ps + 1; i < pi * ps + 1; i++)
25                 {
26                     list.Add("" + i + "个数据");
27                 }
28             }
29             context.Response.Write(new JavaScriptSerializer().Serialize(list));
30         }
31 
32         public bool IsReusable
33         {
34             get
35             {
36                 return false;
37             }
38         }
39     }
40 }

  其实现就是这样,之前不会的时候感觉这东西好高大上,会了之后觉得其实也没啥,哈哈

滚屏无刷新动态加载数据

标签:

原文地址:http://www.cnblogs.com/zuqing/p/scrollmove_dynamic_loaddata.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!