thinkPHP实现瀑布流的方法
本文实例讲述了thinkPHP实现瀑布流的方法。分享给大家供大家参考。具体分析如下:
很多人都想做瀑布流的效果,这里告诉大家官网使用的方法,首先要下载瀑布流的插件jquery.masonry.min.js地址:http://masonry.desandro.com/index.html里面包含的很多示例.
流程:
1.页面初始化时,调用插件进行一次排版;
2.当用户将滚动条拖到底部时,用ajax加载一次数据,并排版显示
3.重复2,直到无数据
Html代码:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"> <title>Inserttitlehere</title> <!--样式--> <styletype="text/css"> body{margin:40pxauto;width:800px;font-size:12px;color:#666;} .item{ border:1pxsolid#D4D4D4; color:red; margin:010px10px0; padding:10px; position:relative; width:200px; } .loading-wrap{ bottom:50px; width:100%; height:52px; text-align:center; display:none; } .loading{ padding:10px10px10px52px; height:32px; line-height:28px; color:#FFF; font-size:20px; border-radius:5px; background:10pxcenterrgba(0,0,0,.7); } .footer{ border:2pxsolid#D4D4D4; } </style> <!--样式--> </head> <body> <!--引入所需要的jquery和插件--> <scripttype="text/javascript"src="/test/public/Js/jquery-1.7.2.min.js"></script> <scripttype="text/javascript"src="/test/public/Js/jquery.masonry.min.js"></script> <!--引入所需要的jquery和插件--> <!--瀑布流--> <divid="container"class="container"> <!--这里通过设置每个div不同的高度,来凸显布局的效果--> <volistname="height"id="vo"> <divclass="item"style="height:{$vo}px;">瀑布流下来了</div> <inputtype="hidden"name="last_id"class="last_id"value="{$vo.id}"/> </volist> </div> <!--瀑布流--> <!--加载中--> <divid="loading"class="loading-wrap"> <spanclass="loading">加载中,请稍后...</span> </div> <!--加载中--> <!--尾部--> <divclass="footer"><center>我是页脚</center></div> <!--尾部--> <scripttype="text/javascript"> //用于转换unix时间戳 functionunix_to_datetime(unix) { varnow=newDate(parseInt(unix)*1000); returnnow.toLocaleString().replace(/年|月/g,"-").replace(/日/g,""); } $(function(){ //页面初始化时执行瀑布流 var$container=$('#container'); $container.masonry({ itemSelector:'.item', isAnimated:true }); //用户拖动滚动条,达到底部时ajax加载一次数据 varloading=$("#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请求 //获取最后一个id varlastid=$('.last_id:last').val(); $.get( "getMore",//要跳转的页面 {lastid:lastid},//传值 function(data){ //获取到了数据data,后面用JS将数据新增到页面上 vargetdata=data.data; varhtml=""; if($.isArray(getdata)){ $.each(data.data,function(i,item){ html+="<divclass=\"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代码:
//初始化的数据 publicfunctionlists(){ $data=D('Info')->order('idDESC')->limit(10)->select(); $this->assign('data',$data); $this->display(); } //获取一次请求的数据 publicfunctiongetMore(){ //获取最后一个id if(!emptyempty($_GET['lastid']))$map['id']=array('lt',$_GET['lastid']); $data=D('Info')->where($map)->order('idDESC')->limit(10)->select(); $this->ajaxReturn($data); }
注意:通过判断窗口是否滚动到页面底部来决定用ajax加载一次数据,如果不做处理,会一下子请求很多次,所以,要使用条件来限制.
这里使用的是往一个元素上赋值$("#loading").data("on",true);,在请求期间判断是true则不继续请求,然后在页面请求完成后再赋值为false.
希望本文所述对大家的ThinkPHP框架程序设计有所帮助。