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分页显示制作详细讲解
Oct 09 PHP
PHP中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
php调用mysql存储过程
Feb 14 PHP
Windows下的PHP安装pear教程
Oct 24 PHP
CI框架安全类Security.php源码分析
Nov 04 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
9个经典的PHP代码片段分享
Dec 18 PHP
php生成图片缩略图的方法
Apr 07 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
Oct 08 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
php TP5框架生成二维码链接
Apr 01 PHP
解析laravel使用workerman用户交互、服务器交互
Apr 28 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
PHP实现用户认证及管理完全源码
2007/03/11 PHP
php格式化日期实例分析
2014/11/12 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
Python处理字符串之isspace()方法的使用
2015/05/19 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
python验证码识别的示例代码
2017/09/21 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
Python数据可视化之画图
2019/01/15 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
入学生会自荐书范文
2014/02/05 职场文书
环保倡议书400字
2014/05/15 职场文书
辞职信范文大全
2015/03/02 职场文书
邹越演讲观后感
2015/06/15 职场文书
详解python网络进程
2021/06/15 Python
新手初学Java List 接口
2021/07/07 Java/Android
AJAX实现省市县三级联动效果
2021/10/16 Javascript
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle