JQ实现简单的瀑布流布局

图片和内容是在蘑菇街取得,本来想着把男明星出轨队的图片放进去,想想还是算了,男人何必为难男人。

直接上代码:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>瀑布流</title>

<style>

img {

border:none;

}

.wrapper {

width:1000px;

margin:0 auto;

}

.wrapper h3{

color:#3366cc;

font-size:16px;

height:35px;

line-height:1.9;

text-align:center;

border-bottom:1px solid #E5E5E5;

margin:0 0 10px 0;

}

#con1_1 {

position:relative;

}

#con1_1 .product_list {

position:absolute;

left:0px;

top:0px;

overflow: hidden;

background:#eee;

margin:5px;

cursor: pointer;

border-top-left-radius: 8px;

border-top-right-radius: 8px;

}

.product_list img {

width:200px;

}

.product_list p {

padding:5px 0px;

font-size:12px;

text-align:center;

color:#333;

white-space:normal;

width:200px;

}

</style>

</head>

<body>

<div class="wrapper">

<h3>蘑菇街</h3>

<div id="con1_1">

</div>

</div>

<script src="js/jquery-1.11.0.js"></script>

<script type="text/javascript">

// 自己模拟的数据

var data ={

"1":{

id:1,

img:"img1.jpg",

info_dec:"今年的宫廷风真的是好看到不行 驾驭也超简单"

},

"2":{

id:2,

img:"img2.jpg",

info_dec:"款式都显腰身又遮肉 搭配一件短毛的外套"

},

"3":{

id:3,

img:"img3.jpg",

info_dec:"舒适又不减时尚 随意的搭配小单品"

},

"4":{

id:4,

img:"img4.jpg",

info_dec:"过年走亲戚都夸的优雅风鸭"

},

"5":{

id:5,

img:"img5.jpg",

info_dec:"既适合通勤又适合日常~鞋子和包包都是我平时常搭配的款"

},

"6":{

id:6,

img:"img6.jpg",

info_dec:"久等啦,战狼女孩闪现✨前一天还不太适应沙漠,但一早起来看到日出真的超美,瞬间好心情!换身最简单不过的白T+牛仔裤+球鞋,come on来拍一张! "

},

"7":{

id:7,

img:"img7.jpg",

info_dec:"黄色小白鞋 鞋型很显脚瘦 走路又轻便 鞋带春天迎春花的颜色~满满的活力 颜色清新百搭的小白鞋 你get了吗?整体黄色系为主 就不会很乱呢休闲穿搭❤️"

},

"8":{

id:8,

img:"img8.jpg",

info_dec:"外搭是一件菱格马甲,针织毛线的,学院风很浓,试穿S码合身。外套是一件黄色的牛角扣连帽大衣,宽松的款式,试穿S码合身,长度对小个子也还算友好。<br>"

},

"9":{

id:9,

img:"img9.jpg",

info_dec:"我为开春做了哪些准备#复古学院风的牛角扣大衣穿搭Hello大家好,这里是大鱼穿搭测评第645期,这一期和大家分享的是牛角扣外套穿搭。"

},

"10":{

id:10,

img:"img10.jpg",

info_dec:"❤️身高体重163|43,给大家做个参考。:内搭是米色元宝领衬衣,减龄复古,百搭的款式啦。"

},

"11":{

id:11,

img:"img11.jpg",

info_dec:":鞋子是有跟的乐福鞋,比较日系复古百搭,推荐啦。❤️喜欢记得给我点赞留言哦!!"

},

"12":{

id:12,

img:"img12.jpg",

info_dec:":内搭的半身裙是蓝色格子的百褶裙,短款有里衬,显瘦高型腰A字版。"

},

"13":{

id:13,

img:"img13.jpg",

info_dec:"上身胖的MM不用再愁冬天怎么穿啦!最显瘦的穿搭指南在这里!"

}

,

"14":{

id:14,

img:"img14.jpg",

info_dec:"亮橙色毛衣搭配绿色格纹围巾很有辨识度~ 搭配晒伤仿妆在冬日也要散发阳光能量"

},

"15":{

id:15,

img:"img15.jpg",

info_dec:"这是我参加小年会的dress code,all black黑色主题♠️我在黑色里加入了bling bling的金属色让整个look看着不会过于沉重,来自MXU的修身设计春款外套真的超级显瘦,肩部开叉和斜侧系带增加设计感,金属色鞋子与内搭相呼应,让整体搭配舒服且协调~"

},

"16":{

id:16,

img:"img16.jpg",

info_dec:"少女感赛高,过年就靠它取胜了"

}

}

// 遍历数据插入结构里

$(function(){

var str = "";

for(var attr in data){

//console.log(data[attr].img);

str += `

<div class="product_list">

<a href="#"><img src="images/${data[attr].img}"/></a>

<p>${data[attr].info_dec}</p>

</div>

`

}

$("#con1_1").html(str);

/*

原理:1.把所有的li的高度值放到数组里面

2.第一行的top都为0

3.计算高度值最小的值是哪个li

4.把接下来的li放到那个li的下面

*/

var margin = 10;//设置间距

var li=$(".product_list");//区块名称

var li_W = li[0].offsetWidth+margin;//取区块的实际宽度

function liuxiaofan(){

var h=[];//记录区块高度的数组

var n = 960/li_W|0;

for(var i = 0;i < li.length;i++) {

li_H = li[i].offsetHeight;//获取每个li的高度

if(i < n) {//n是一行最多的li,所以小于n就是第一行了

max_H =Math.max.apply(null,h);

h[i]=li_H;//把每个li放到数组里面

li.eq(i).css("top",0);//第一行的Li的top值为0

li.eq(i).css("left",i * li_W);//第i个li的左坐标就是i*li的宽度

}

else{

min_H =Math.min.apply(null,h) ;//取得数组中的最小值,区块中高度值最小的那个

minKey = getarraykey(h, min_H);//最小的值对应的指针

h[minKey] += li_H+margin ;//加上新高度后更新高度值

li.eq(i).css("top",min_H+margin);//先得到高度最小的Li,然后把接下来的li放到它的下面

li.eq(i).css("left",minKey * li_W); //第i个li的左坐标就是i*li的宽度

}

// $("p").eq(i).text("高度:"+li_H);//把区块高度值写入对应的区块H2标题里面

}

max =Math.max.apply(null,h) ;

$("#con1_1").css("height",max);

}

/* 使用for in运算返回数组中某一值的对应项数(比如算出最小的高度值是数组里面的第几个) */

function getarraykey(s, v) {for(k in s) {if(s[k] == v) {return k;}}}

/*这里一定要用onload,因为图片不加载完就不知道高度值*/

window.onload = function() {liuxiaofan();};

window.onresize = function() {liuxiaofan();};

//鼠标在上样式

$(function(){

$(".product_list").hover(function(){

$(this).css("background-color","#ddd");

},function() {

$(this).css("background-color","#eee");

});

});

})

</script>

</body>

</html>

效果图:(其实也可以边向下滚动边加载,大家可以自己写下。)

JQ实现简单的瀑布流布局