thinkPHP实现瀑布流的方法


Posted in PHP onNovember 29, 2014

本文实例讲述了thinkPHP实现瀑布流的方法。分享给大家供大家参考。具体分析如下:

很多人都想做瀑布流的效果,这里告诉大家官网使用的方法,首先要下载瀑布流的插件jquery.masonry.min.js 地址:http://masonry.desandro.com/index.html里面包含的很多示例.

流程:

1. 页面初始化时,调用插件进行一次排版;

2. 当用户将滚动条拖到底部时,用ajax加载一次数据,并排版显示

3. 重复2,直到无数据

Html代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  

<html xmlns="http://www.w3.org/1999/xhtml">  

<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>  

<input type="hidden" name="last_id" class="last_id" value="{$vo.id}"/>  

</volist>  

</div>  

<!--瀑布流-->  

<!--加载中-->  

<div id="loading" class="loading-wrap">  

<span class="loading">加载中,请稍后...</span>  

</div>  

<!--加载中-->  

<!--尾部-->  

<div class="footer"><center>我是页脚</center></div>  

<!--尾部-->  

<script type="text/javascript">  

//用于转换unix时间戳  

function unix_to_datetime(unix)   

{  

var now = new Date(parseInt(unix) * 1000);  

return now.toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");  

}  

$(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请求  

  

//获取最后一个id  

var lastid = $('.last_id:last').val();  

$.get(  

"getMore", //要跳转的页面  

{lastid:lastid},//传值  

function(data){  

//获取到了数据data,后面用JS将数据新增到页面上  

var getdata = data.data;  

var html = "";  

if($.isArray(getdata)){  

$.each(data.data,function(i,item) {  

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代码:

//初始化的数据  

public function lists(){   

$data = D('Info')->order('id DESC')->limit(10)->select();  

$this->assign('data', $data);  

$this->display();  

}  

//获取一次请求的数据  

public function getMore(){   

//获取最后一个id  

if(!emptyempty($_GET['lastid']))$map['id'] = array('lt', $_GET['lastid']);   

$data = D('Info')->where($map)->order('id DESC')->limit(10)->select();  

$this->ajaxReturn($data);  

}

注意:通过判断窗口是否滚动到页面底部来决定用ajax加载一次数据,如果不做处理,会一下子请求很多次,所以,要使用条件来限制.

这里使用的是往一个元素上赋值 $("#loading").data("on", true);,在请求期间判断是true则不继续请求,然后在页面请求完成后再赋值为false.

希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

PHP 相关文章推荐
php合并数组array_merge函数运算符加号与的区别
Oct 31 PHP
PHP 程序员也要学会使用“异常”
Jun 16 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
php内存缓存实现方法
Jan 24 PHP
PHP中数据类型转换的三种方式
Apr 02 PHP
PHP网络操作函数汇总
May 18 PHP
WordPress分页伪静态加html后缀
Jun 08 PHP
php函数mkdir实现递归创建层级目录
Oct 27 PHP
PHP中list方法用法示例
Dec 01 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
Jun 25 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 PHP
php删除左端与右端空格的方法
Nov 29 #PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 #PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
Nov 29 #PHP
Sublime里直接运行PHP配置方法
Nov 28 #PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 #PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 #PHP
php的mssql数据库连接类实例
Nov 28 #PHP
You might like
第三节--定义一个类
2006/11/16 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
JS实现标签页效果(配合css)
2013/04/03 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python笔记(2)
2012/10/24 Python
深入讲解Python中的迭代器和生成器
2015/10/26 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python打包可执行文件的方法详解
2016/09/19 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
详解Python中的文件操作
2021/01/14 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
网络安全方面的面试题
2016/01/07 面试题
金融系毕业生自荐书
2014/07/08 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
超市员工辞职信范文
2015/05/12 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python
使用python绘制分组对比柱状图
2022/04/21 Python