jQuery 瀑布流效果的实现

类似与人人网的探索模块、还有微博等这种瀑布流的布局效果,其实可以用简单的jquery实现

1、首先在页面中创建4列div,表示4列“流”,代码:

<div id="wish_body" class="body">
	<div id="wish_body_1" class="column"></div>
	<div id="wish_body_2" class="column"></div>
	<div id="wish_body_3" class="column"></div>
	<div id="wish_body_4" class="column"></div>
	<!-- 清除浮动,自动div高度自动增加 -->
	<div class="clear"></div>
</div>

2、然后用jquery加载数据,代码:

// first load wish
// 打开时自动加载几列数据
$.post('commons/action.php?action=loadWishes',{
	num : num,	//加载数量
	page : page	//加载页数
},function(data){
	var arr = $.parseJSON(data);
	// 调用方法,把获取的数据添加到页面中
	addWishToBody(arr);
});

3、把加载的数据添加到页面中,代码:

/*
	add wish to body
	params arr
*/
function addWishToBody(arr){
	// 页面中共4列,默认添加到第1列
	var column = 1;
	// 遍历加载的数据,添加到页面
	for (var i = arr.length - 1; i >= 0; i--) {
		// getShorterColumn()该方法计算四列中较短的那列,然后在该列中添加数据
		column = getShorterColumn() + 1;
		var wish = arr[i];
		id = wish.id;
		var div_wish = "<div id='"+id+"' class='wish'>"+
			"<div class='title'>"+wish.title+"</div>"+
			"<div class='content'><a>"+wish.text+"</a></div>"+
			"<div class='author'><img src='"+wish.gif+"' width = 200></div>"+
			"<div class='time'>"+wish.author +"发表于"+ wish.createtime+"</div></div>";

		$("#wish_body_"+column).append(div_wish);
	};

}

4、计算4列中较短列,代码:

/*
	get the shorter column
*/
function getShorterColumn(){
	var wish_body_1 = $("#wish_body_1").height();
	var wish_body_2 = $("#wish_body_2").height();
	var wish_body_3 = $("#wish_body_3").height();
	var wish_body_4 = $("#wish_body_4").height();

	var array = [wish_body_1,wish_body_2,wish_body_3,wish_body_4];

	var shorter = array[0];
	var index = 0;
	for (var i = 1; i < array.length; i++) {
		if(array[i] < shorter){
			shorter = array[i];
			index = i;
		}
	};

	return index;
		
}

 

发表评论