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 相关文章推荐
ftp类(myftp.php)
Oct 09 PHP
新浪新闻小偷
Oct 09 PHP
PHP读MYSQL中文乱码的解决方法
Dec 17 PHP
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
第七章 php自定义函数实现代码
Dec 30 PHP
ini_set的用法介绍
Jan 07 PHP
php版小黄鸡simsimi聊天机器人接口分享
Jan 26 PHP
php文件操作之小型留言本实例
Jun 20 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 PHP
解决Laravel无法使用COOKIE和SESSION的问题
Oct 16 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/04/13 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
phalcon框架使用指南
2016/02/23 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
javascript实现的listview效果
2007/04/28 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
javascript简单实现命名空间效果
2014/03/06 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
Js面试算法详解
2018/04/08 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
Python中django学习心得
2017/12/06 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
人事部经理岗位职责
2014/03/07 职场文书
读书活动总结范文
2014/04/26 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
新郎结婚保证书
2015/02/26 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript