分页数据的新展示方式---瀑布流

最近老大让我做一个js效果,要求页面开始展示(比方说40条数据),当鼠标滚动到页面底部时,再加载后面的数据。开始没有半点头绪,想到过jQuery插件,但是也没怎么用起来,还是自己写吧;可以肯定的一条思路是:当滚动页面底部时,肯定是去加载下一页的数据了,这个时候页面应该没有刷新的操作,所以想到了异步Ajax。

代码部分,首先在SQL server中写了一个存储过程,

ALTER proc [dbo].[proc_Nav]
@pageSize int,        
                     
 --每页显示多少条
@pageIndex int,            
                 --当前页码
@total
int output                    
       --总记录数
as
select top (@pageSize) * from
city
where ID not in
(
select top (@pageSize*@pageIndex) ID from
city
order by cityID desc
)
order by cityID desc

select @total= COUNT(0) from city            
   --算出总记录数,并赋值给@total.

在SQLHelper中,为调用这个存储过程,加了一个方法,代码如下:


 1 public static DataTable GetDataTableExt(out int iCount, params SqlParameter[] pars)
2 {
3 DataTable dt = null;
4 int i = 0;
5 using (SqlConnection conn = new SqlConnection(constr))
6 {
7 using (SqlCommand cmd=new SqlCommand("proc_Nav",conn))
8 {
9 cmd.CommandType = CommandType.StoredProcedure;
10 if (pars != null)
11 {
12 cmd.Parameters.AddWithValue("@pageSize", pars[0].Value.ToString());
13 cmd.Parameters.AddWithValue("@pageIndex", pars[1].Value.ToString());
14
15 SqlParameter para3 = new SqlParameter("@total", SqlDbType.Int);
16 para3.Direction = ParameterDirection.Output; //输出参数
17 cmd.Parameters.Add(para3);
18
19 using (SqlDataAdapter adapter=new SqlDataAdapter(cmd))
20 {
21 DataSet ds = new DataSet();
22 adapter.Fill(ds);
23 dt = ds.Tables[0];
24 }
25
//上面的代码执行完后,para3就有值了,为了保险起见,还是做一个判断
26 if (para3.Value != null)
27 {
28 i = int.Parse(para3.Value.ToString());
29 }
30 }
31 }
32 }
33 iCount = i; //对输出参数赋值
34 return dt;
35 }

DAL层的代码如下:

+ ?





1

2

3

4

5

6

7

8

9

10

11

public
DataTable GetModelList(out
int iCount,params
SqlParameter[] para)

        {

            int
i = 0;

            DataTable dt=null;

            if
(para!=null)

            {

                dt = SQLHelper.GetDataTableExt(out
i, para);

            }

            iCount = i;

            return
dt;

        }

 BLL层调用DAL层这个方法。

界面上用一个table做布局,代码如下:

+ ?





1

2

3

4

5

6

7

8

<table>

        <thead>

        <tr>

            <th>编号</th><th>城市ID</th><th>城市名</th><th>父级ID</th>

        </tr>

        </thead>

        <tbody id="tbody1"></tbody>

    </table>

  下面要做的是,用js去填充tbody1。js部分的代码如下:

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

<script src="../Scripts/jquery-1.8.0.min.js"
type="text/javascript"></script>

    <script type="text/javascript">

        $(function () {<br>           //定义一个变量,维护页码

            var
iIndex = 1;

            LoadData(iIndex);

            var
times;

            $(window).scroll(function () {

                if
($(window).scrollTop() == $(document).height() - $(window).height()) {

                    clearTimeout(times);

                    times = setTimeout(function () {

                        //                        alert(‘到底了,开始加载入内容‘);

                        iIndex++;      //页码+1,递归加载下一页的数据

                        LoadData(iIndex);     

                    });

                }

            });

        });

        //加载数据

        function LoadData(i) {

        //发送异步请求

            $.post("Demo.ashx", { "size": 60, "index": i }, function (data) {

                var
jsonData = $.parseJSON(data);

                for
(var
i = 0; i < jsonData.length; i++) {

                    $("#tbody1").append("<tr><td>"
+ jsonData[i].ID + "</td><td>"
+ jsonData[i].cityID + "</td><td>"
+ jsonData[i].cityName + "</td><td>"
+ jsonData[i].PId + "</td></tr>");

                }

            });

        }

    </script>

  后台的Demo.ashx处理如下:

+ ?





1

2

3

4

5

6

7

8

9

10

11

12

context.Response.ContentType = "text/plain";

            BLL.CityBll cityBll = new
BLL.CityBll();

            SqlParameter[] paras = new
SqlParameter[]{

            new
SqlParameter("@pageSize",context.Request["size"]),

            new
SqlParameter("@pageIndex",context.Request["index"]),

            new
SqlParameter("@total",System.Data.SqlDbType.Int)

            };

            int
iCount=0;

            DataTable dt = cityBll.GetModelList(out
iCount, paras);

            List<CityModel> model = DataTableToList(dt);

            System.Web.Script.Serialization.JavaScriptSerializer jsSerializer = new
System.Web.Script.Serialization.JavaScriptSerializer();

            context.Response.Write(jsSerializer.Serialize(model));

  DataTableToList()方法的代码如下:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//将DataTable转换成List集合的方法

       private
List<CityModel> DataTableToList(DataTable dt)

       {

           List<CityModel> modelLst = new
List<CityModel>();

           foreach
(DataRow row in
dt.Rows)

           {

               CityModel model = new
CityModel();

               model.cityID = int.Parse(row["cityID"].ToString());

               model.cityName = row["cityName"].ToString();

               model.ID = int.Parse(row["ID"].ToString());

               model.PId = int.Parse(row["PId"].ToString());

               modelLst.Add(model);

           }

           return
modelLst;

       }

 小弟不才,第一次写这个效果;如果各位大神有认为不合理的地方,可以提给我,共同进步吧!写在这里,算是给自己的一个小结。

分页数据的新展示方式---瀑布流,布布扣,bubuko.com

时间: 2024-10-13 11:16:32

分页数据的新展示方式---瀑布流的相关文章

AJAX异步实现简单的瀑布流

传统瀑布流布局ul-li,需要先设定显示几列,每列是一个li,需要左浮动并指定宽度,li里面的布局也要先布局好,主要是要定宽,高度自动:然后通过ajax异步,从数据库中得到数据,遍历后将数据插入最矮的li中 HTML中的代码: <!--定义JS中需要的数据--><script type="text/javascript">var ajaxHandle='<{:U("Index/Typeshow/ajax","",&q

sessionStorage用于分页,瀑布流和存储用户数据等

在手机网页开发中,会用到分页和瀑布流来分量显示数据.这里会遇到一个问题.当点击某条数据进入详情后,再按手机的返回键会到上一个页面,该页面是重新加载的. 本人在微信里用内置的qq浏览器打开页面,window.history.back(),window.history.go()这些不说参数会重置,但a标签的target _blank,都无法办法,根本没有新开页面. 于是只要用到sessionStorage了. sessionStorage是html5中类似于session,cookie的东西,能存储

ASP.NET仿新浪微博下拉加载更多数据瀑布流效果

闲来无事,琢磨着写点东西.貌似页面下拉加载数据,瀑布流的效果很火,各个网站都能见到各式各样的展示效果,原理大同小异.于是乎,决定自己写一写这个效果,希望能给比我还菜的菜鸟们一点参考价值. 在开始之前,先把实现的基本原理说一下.当夜幕下拉到底部的时候,js可以判断滚动条的位置,到达底部触发js方法,执行jquery的ajax方法,向后台一般处理程序夜幕ashx文件请求数据源,得到json格式的数据源.然后,遍历json数据源,拼接一个li标签,再填充到页面上去. 首先,我们来做个简单的html页面

代码: 两列图片瀑布流(一次后台取数据,图片懒加载。下拉后分批显示图片。图片高度未知,当图片onload后才显示容器)

代码: 两列图片瀑布流(一次后台取数据,无ajax,图片懒加载.下拉后分批显示图片.图片高度未知,当图片onload后才显示容器) [思路]: 图片瀑布流,网上代码有多种实现方式,也有各类插件.没找到合意的,所以根据网上找的一段代码,进行了较大改动. 需引用 zepto 或 jquery. 我这个是应用于手机上的,两列瀑布流,图片高度未知——等图片的onloaded事件触发后,才对容器进行计算和定位. 大容器是 $("#imgList"),容器格子是$(".pin"

jquery实现瀑布流并与php实现数据交互

以前js 实现过一个瀑布流,jquery 也来实现一个 主要思路: 1  先显示出来大概20张图片,使界面出现滚动条 2 设置显示出来图片父id 设置为relative 定位,图片定位方式为float 定位 3 使刚显示出来的图片作为折叠出现,呈现为瀑布流 4 当滚动 滚动条时,判断是否进行加载图片 5 使新加载的图片重新进行瀑布流排序 重点: 1 判断什么时间进行加载新图片 2 实现瀑布流式排序 怎样确定加载哪部分图片那,在后台limit 一下位置就ok啦 好,上代码: 1 先显示出来部分图片

新随笔(一) 从用户心理体验谈慎用瀑布流设计

新随笔(一) 从用户心理体验谈慎用瀑布流设计 最早使用瀑布流布局技术的是Pinterest,瀑布流设计确实带给用户更新鲜的视觉体验,很容易引导用户不停滚动鼠标,感觉丰富的内容永远不会结束,瀑布流的设计有他很明显的优点,但同时也有他的缺点,并不是所有网站都适用. 社交网站和移动设备适用于瀑布流设计 移动界面由于手机屏幕狭窄,列表项垂直排列,需要单手频繁的滚动,当用户向下滚动内容,自动加载更多的内容,而无需等待页面预加载.这样,用户会感觉到响应很及时,现在微博.微信均采用此方式, 社交网站之所以采用

iOS开发UI篇—自定义瀑布流控件(蘑菇街数据刷新操作)

iOS开发UI篇—自定义瀑布流控件(蘑菇街数据刷新操作) 一.简单说明 使用数据刷新框架: 该框架提供了两种刷新的方法,一个是使用block回调(存在循环引用问题,_ _weak),一个是使用调用. 问题:在进行下拉刷新之前,应该要清空之前的所有数据(在刷新数据这个方法中). 移除正在显示的cell: (1)把字典中的所有的值,都从屏幕上移除 (2)清除字典中的所有元素 (3)清除cell的frame,每个位置的cell的frame都要重新计算 (4)清除可复用的缓存池. 该部分的代码如下: 1

瀑布流代码,简洁版 带分页

接上一篇   瀑布流代码,简洁版 的功能之上添加分页的功能 Index.cshtml @using PagedList.Mvc @model PagedList.StaticPagedList<int> @{ ViewBag.Title = "瀑布流"; Layout = "~/Views/Shared/_Layout.cshtml"; } @section header{ <script src="~/Scripts/jquery-ui

瀑布流ajax分页

index.jsp 1 <%@ page language="java" pageEncoding="UTF-8"%> 2 <!DOCTYPE HTML> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> 6 <title>图片&