jQuery实现瀑布流布局
HTML
<divid="main">
<divclass="box">
<divclass="pic">
<imgsrc="images/0.jpg"alt="">
</div>
</div>
<divclass="box">
<divclass="pic">
<imgsrc="images/1.jpg"alt="">
</div>
</div>
<divclass="box">
<divclass="pic">
<imgsrc="images/2.jpg"alt="">
</div>
</div>
<divclass="box">
<divclass="pic">
<imgsrc="images/3.jpg"alt="">
</div>
</div>
<divclass="box">
<divclass="pic">
<imgsrc="images/4.jpg"alt="">
</div>
</div>
<divclass="box">
<divclass="pic">
<imgsrc="images/2.jpg"alt="">
</div>
</div>
</div>
CSS
*{
margin:0;
padding:0;
}
#main{
position:relative;
}
.box{
padding:15px0015px;
float:left;
}
.pic{
padding:10px;
border:1pxsolid#ccc;
border-radius:5px;
box-shadow:0px0px5px#ccc;
img{
width:165px;
height:auto;
}
}
JavaScript
$(window).on("load",function(){
waterfall();
vardataInt={"data":[{"src":"7.jpg"},{"src":"8.jpg"},{"src":"9.jpg"},{"src":"6.jpg"}]}
//模拟json数据;
$(window).on("scroll",function(){
if(checkScrollSlide){
$.each(dataInt.data,function(key,value){
varoBox=$("<div>").addClass("box").appendTo($("#main"));
//jQuery支持连缀,隐式迭代;
varoPic=$("<div>").addClass('pic').appendTo($(oBox));
$("<img>").attr("src","images/"+$(value).attr("src")).appendTo(oPic);
});
waterfall();
}
})
});
//流式布局主函数;
functionwaterfall(){
var$boxs=$("#main>div");
//获取#main元素下的直接子元素div.box;
//获取每一列的宽度;
varw=$boxs.eq(0).outerWidth();
//outerWidth()获取包含padding和border在内的宽度;
//varw=$boxs.eq(0).width();
//width()只能获取给元素定义的宽度;
varcols=Math.floor($(window).width()/w);
//获取多少列;
$("#main").width(w*cols).css("margin","0auto");
//设置#main元素的宽度和居中样式;
varhArr=[];
//每一列高度的集合;
$boxs.each(function(index,value){
//遍历每一个box元素;
//为了找到之前所有元素的最低点,然后将本元素设置到最低点之下;
varh=$boxs.eq(index).outerHeight();
//每一个box元素的高,
if(index<cols){
hArr[index]=h;
//确定每列第一个元素的高度;
}else{
varminH=Math.min.apply(null,hArr);
//得出列高数组中的最小高度;
varminHIndex=$.inArray(minH,hArr);
//$.inArray()方法得出元素(minH)在数组(hArr)中的index值;
//console.log(value);
//此时的value是第一行之后的所有的box元素的DOM对象!;
$(value).css({
//$(value):将DOM对象转换成jQuery对象,才能继续使用jQuery方法;
"position":"absolute",
"top":minH+"px",
"left":minHIndex*w+"px"
});
hArr[minHIndex]+=$boxs.eq(index).outerHeight();
//最低高元素的高度+刚添加到最低高度下的元素的高度=新的列高;
};
});
//console.log(hArr);
};
functioncheckScrollSlide(){
var$lastBox=$("#main>div").last();
varlastBoxDis=$lastBox.offset().top+Math.floor($lastBox.outerHeight()/2);
varscrollTop=$(window).scrollTop();
vardocumentH=$(window).height();
return(lastBoxDis<scrollTop+documentH)?true:false;
}
详细解释清仔细参考注释吧,我就不单独再拉出来写了。