最近一个项目使用到了瀑布流效果,在这里总结一下。使用jquery框架。
最终效果:

思路:
使用五个并列的div;
首次加载n条数据;
之后由scroll触发ajax数据加载;
加载每条数据时,判断5个div的高度,把数据加载到高度最短的div里。
数据加载代码:
$(document).bind(‘scroll‘,(function(){
//离底部100px时触发加载
var closeToBottom = ($(window).scrollTop() + $(window).height() > $(document).height() - 100);
if (closeToBottom&&(global.total>(global.page)*global.limit)) {
global.page++;
global.loadData();
}
}));
5个div
<div class="content"> <div class="col col1"> </div> <div class="col col2"> </div> <div class="col col3"> </div> <div class="col col4"> </div> <div class="col col5"> </div> </div>
css
.content{
width: 100%;
margin-top: 20px;
text-align: center;
}
.home-content .col{
width: 200px;
margin: 0 5px 0 5px;
display: inline-table;
}
loadData:function(){
$.getJSON(
你的url,
global.params,
function(rep){
var result = rep;
global.total = result.total;
//确认有数据
if(result&&result.rows&&result.rows.length>0){
var arr = result.rows;
//循环加载每一条数据
for(var i = 0,len = arr.length;i<len;i++){
//拼html
var content = ‘<div class="content-item">‘+
‘<a target="_blank" href="跳转url"><img width="200" src="‘+arr[i].imgurl+‘"></a>‘+
‘<div class="card-intro">‘+
‘<p class="card-t">‘+arr[i].title+‘</p>‘+
‘<p class="card-news">‘+arr[i].abstract+‘</p>‘+
‘<span class="card-more">‘+
global.formatTime(arr[i].time)+‘/‘+
‘<a target="_blank" href="跳转url">阅读更多</a>‘+
‘</span>‘+
‘</div>‘+
‘</div>‘;
//得到高度最低的div然后添加到末端,此处可以优化用变量保存各div的高度,不用每次get
global.getListMin().append(content);
}
}
}
);
},
//时间format
formatTime:function(time){
return time.substr(0,4)+‘-‘+time.substr(4,2)+‘-‘+time.substr(6,2);
},
getListMin:function(){
var listDiv=[$(‘.col1‘),$(‘.col2‘),$(‘.col3‘),$(‘.col4‘),$(‘.col5‘)];
var min = $(‘.col1‘).height();
var item = $(‘.col1‘);
//循环5个div获取高度最低的那个
for(var i = 1,len=listDiv.length;i<len;i++){
if(listDiv[i].height()<min){
item = listDiv[i];
min = listDiv[i].height();
}
}
return item;
}
页面效果: http://www.xinzangcha.com/News
缺点: 当5列div某列的第一个数据高度和其余的不同时,其余div会出现留白的现象,待修正。
原文:http://my.oschina.net/sencha/blog/490905