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 301转向实现代码
Sep 18 PHP
php PDO中文乱码解决办法
Jul 20 PHP
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
fgetcvs在linux的问题
Jan 15 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
PHP错误提示的关闭方法详解
Jun 23 PHP
php的闭包(Closure)匿名函数初探
Feb 14 PHP
PHP获取HTTP body内容的方法
Dec 31 PHP
PHP-FPM 的管理和配置详解
Feb 17 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
Apr 30 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
May 27 PHP
php操作redis数据库常见方法实例总结
Feb 20 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根据日期判断星座的函数分享
2014/02/13 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
php中file_exists函数使用详解
2015/05/08 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
在Python中使用第三方模块的教程
2015/04/27 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
virtualenv介绍及简明教程
2020/06/23 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
销售高级职员求职信
2013/10/29 职场文书
高级人员简历的自我评价分享
2013/11/03 职场文书
初中生期末考试的自我评价
2013/12/17 职场文书
老公给老婆的道歉信
2014/01/10 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
妇女干部培训方案
2014/05/12 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
2014年团委工作总结
2014/11/13 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
学生病假条范文
2015/08/17 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
2019秋季运动会口号
2019/06/25 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书