jQuery实现瀑布流布局_Javascript教程-查字典教程网
jQuery实现瀑布流布局
jQuery实现瀑布流布局
发布时间:2016-12-30 来源:查字典编辑
摘要:HTML复制代码代码如下:CSS复制代码代码如下:*{margin:0;padding:0;}#main{position:relative...

HTML

复制代码 代码如下:

<div id="main">

<div>

<div>

<img src="images/0.jpg" alt="">

</div>

</div>

<div>

<div>

<img src="images/1.jpg" alt="">

</div>

</div>

<div>

<div>

<img src="images/2.jpg" alt="">

</div>

</div>

<div>

<div>

<img src="images/3.jpg" alt="">

</div>

</div>

<div>

<div>

<img src="images/4.jpg" alt="">

</div>

</div>

<div>

<div>

<img src="images/2.jpg" alt="">

</div>

</div>

</div>

CSS

复制代码 代码如下:

* {

margin: 0;

padding: 0;

}

#main {

position: relative;

}

.box {

padding:15px 0 0 15px;

float:left;

}

.pic {

padding: 10px;

border: 1px solid #ccc;

border-radius: 5px;

box-shadow: 0px 0px 5px #ccc;

img {

width:165px;

height:auto;

}

}

JavaScript

复制代码 代码如下:

$(window).on("load",function () {

waterfall();

var dataInt = { "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) {

var oBox=$("<div>").addClass("box").appendTo($("#main"));

//jQuery支持连缀,隐式迭代;

var oPic=$("<div>").addClass('pic').appendTo($(oBox));

$("<img>").attr("src","images/"+$(value).attr("src")).appendTo(oPic);

});

waterfall();

}

})

});

//流式布局主函数;

function waterfall () {

var $boxs=$("#main>div");

//获取#main元素下的直接子元素div.box;

//获取每一列的宽度;

var w=$boxs.eq(0).outerWidth();

//outerWidth()获取包含padding和border在内的宽度;

//var w=$boxs.eq(0).width();

//width()只能获取给元素定义的宽度;

var cols=Math.floor($(window).width()/w);

//获取多少列;

$("#main").width(w*cols).css("margin","0 auto");

//设置#main元素的宽度和居中样式;

var hArr=[];

//每一列高度的集合;

$boxs.each(function (index,value) {

//遍历每一个box元素;

//为了找到之前所有元素的最低点,然后将本元素设置到最低点之下;

var h=$boxs.eq(index).outerHeight();

//每一个box元素的高,

if (index<cols) {

hArr[index]=h;

//确定每列第一个元素的高度;

} else{

var minH=Math.min.apply(null,hArr);

//得出列高数组中的最小高度;

var minHIndex=$.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);

};

function checkScrollSlide () {

var $lastBox=$("#main>div").last();

var lastBoxDis=$lastBox.offset().top+Math.floor($lastBox.outerHeight()/2);

var scrollTop=$(window).scrollTop();

var documentH=$(window).height();

return (lastBoxDis<scrollTop+documentH)?true:false;

}

详细解释清仔细参考注释吧,我就不单独再拉出来写了。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类