瀑布流的小例子 和ThinkPHP相结合

简介:

        瀑布流的插件jquery.masonry.min.js 地址:http://masonry.desandro.com/index.html里面有很多,但是都是英文的,因为项目需要,就自己写了一个简单的例子

       其实瀑布流就是用了固定的宽度或者高度产生一堆不规则的div来展现出来的。

   流程是

1:初始化页面的时候加载一次数据

2.当页面到底部的时候再次加载数据

3,重复以上操作直到没有数据

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<!DOCTYPE HTML>
  < html >
  < head >
  < meta  http-equiv = "Content-Type"  content = "text/html; charset=UTF-8" >
  < title >Insert title here</ title >
  <!--样式-->
  < style  type = "text/css" >
body {margin:40px auto; width:800px; font-size:12px; color:#666;}
  .item{
     border: 1px solid #D4D4D4;
     color: red;
     margin: 0 10px 10px 0;
     padding: 10px;
     position: relative;
     width: 200px;
  }
  .loading-wrap{
     bottom: 50px;
     width: 100%;
     height: 52px;
     text-align: center;
     display: none;
  }
  .loading {
     padding: 10px 10px 10px 52px;
     height: 32px;
     line-height: 28px;
     color: #FFF;
     font-size: 20px;
     border-radius: 5px;
     background: 10px center rgba(0,0,0,.7);
  }
  .footer{
     border: 2px solid #D4D4D4;
  }
  </ style >
  <!--样式-->
  </ head >
  < body >
  <!--引入所需要的jquery和插件-->
  < script  type = "text/javascript"  src = "/test/public/Js/jquery-1.7.2.min.js" ></ script >
  < script  type = "text/javascript"  src = "/test/public/Js/jquery.masonry.min.js" ></ script >
  <!--引入所需要的jquery和插件-->
  <!--瀑布流-->
  < div  id = "container"  class = " container" >
  <!--这里通过设置每个div不同的高度,来凸显布局的效果-->
  < volist  name = "height"  id = "vo" >
     < div  class = "item"  style = "height:{$vo}px;" >瀑布流下来了</ div >
  </ volist >
  </ div >
  <!--瀑布流-->
  <!--加载中-->
  < div  id = "loading"  class = "loading-wrap" >
     < span  class = "loading" >加载中,请稍后...</ span >
  </ div >
  <!--加载中-->
  <!--尾部-->
  < div  class = "footer" >< center >我是页脚</ center ></ div >
  <!--尾部-->
  < script  type = "text/javascript" >
$(function(){
     //页面初始化时执行瀑布流
     var $container = $('#container');
      $container.masonry({
         itemSelector : '.item',
         isAnimated: true
      });
      //用户拖动滚动条,达到底部时ajax加载一次数据
     var loading = $("#loading").data("on", false);//通过给loading这个div增加属性on,来判断执行一次ajax请求
     $(window).scroll(function(){
         if(loading.data("on")) return;
         if($(document).scrollTop() > $(document).height()-$(window).height()-$('.footer').height()){//页面拖到底部了
             //加载更多数据
             loading.data("on", true).fadeIn();         //在这里将on设为true来阻止继续的ajax请求
             $.get(
                 "getMore",
                 function(data){
                    //获取到了数据data,后面用JS将数据新增到页面上
                     var html = "";
                     if($.isArray(data)){
                         for(i in data){
                             html += "< div  class=\"item\" style=\"height:"+data[i]+"px;\">瀑布又流下来了</ div >";
                         }
                         var $newElems = $(html).css({ opacity: 0 }).appendTo($container);
                         $newElems.imagesLoaded(function(){
                             $newElems.animate({ opacity: 1 });
                             $container.masonry( 'appended', $newElems, true );
                               });
                       //一次请求完成,将on设为false,可以进行下一次的请求
                         loading.data("on", false);
                     }
                     loading.fadeOut();
                 },
                 "json"
             );
         }
     });
  });
  </ script >
  </ body >
  </ html >

在Action里添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class  UserAction  extends  Action{
  //初始化的数据
         public  function  index(){
         for  ( $i =0; $i <10; $i ++){
             $res [ $i ] = rand(100, 400);
         }
         $this ->assign( 'height' $res );
         $this ->display();
                                                                 
     }
  //获取一次请求的数据
         public  function  getMore(){
         for  ( $i =0; $i <6; $i ++){
             $res [ $i ] = rand(100, 400);
         }
         $this ->ajaxReturn( $res );
     }
  }

注意:

通过判断窗口是否滚动到页面底部来决定用ajax加载一次数据。如果不做处理,会一下子请求很多次。所以,要使用条件来限制。
我使用的是往一个元素上赋值 $("#loading").data("on", true);,在请求期间判断是true则不继续请求,然后在页面请求完成后再赋值为false


在真实的例子中,Action里初始化数据的时候,要从数据库调用一次数据。

而在getMore中也要在到底部的时候加载一次数据,所以一定得保证这两次不要将从数据库请求的数据重复了。或者可以做判断来完成.~要不然就会造成加载重复数据的结果。









本文转自 3147972 51CTO博客,原文链接:http://blog.51cto.com/a3147972/1213873,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
前端开发 搜索推荐 JavaScript
探析单页应用(SPA)与多页应用(MPA):从技术角度选择合适的应用形式
随着Web应用的快速发展,单页应用(SPA)和多页应用(MPA)成为了开发者们在构建Web应用时常遇到的两种选择。本文将从技术角度出发,深入比较单页应用和多页应用的特点和优势,帮助读者更好地选择适合自己项目的应用形式。
19 0
|
5月前
|
JSON JavaScript 前端开发
Extjs数据展现原理
Extjs数据展现原理
|
9月前
|
前端开发 UED
前端网页布局方式及案例
前端网页布局方式及案例
164 0
|
9月前
Threejs入门进阶实战案例(4):addEventListener() 方法自适应窗口显示的方案
Threejs入门进阶实战案例(4):addEventListener() 方法自适应窗口显示的方案
42 0
|
前端开发
前端学习案例2-瀑布流方式2
前端学习案例2-瀑布流方式2
52 0
前端学习案例2-瀑布流方式2
|
前端开发
前端学习案例4-瀑布流方式4
前端学习案例4-瀑布流方式4
51 0
前端学习案例4-瀑布流方式4
|
前端开发
前端学习案例1-瀑布流方式1
前端学习案例1-瀑布流方式1
66 0
前端学习案例1-瀑布流方式1
|
前端开发
前端学习案例3-瀑布流方式3
前端学习案例3-瀑布流方式3
44 0
前端学习案例3-瀑布流方式3
|
前端开发 搜索推荐 索引
重学前端 5 # 如何运用语义类标签来呈现Wiki网页?
重学前端 5 # 如何运用语义类标签来呈现Wiki网页?
89 0
重学前端 5 # 如何运用语义类标签来呈现Wiki网页?
|
前端开发 JavaScript 容器
重学前端 42 # 用代码挖掘W3C中的CSS属性
重学前端 42 # 用代码挖掘W3C中的CSS属性
120 0
重学前端 42 # 用代码挖掘W3C中的CSS属性