版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csl125/article/details/81808872
HTML代码
<!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>
<link rel="stylesheet" href="css/pbl.css">
<script src="js/pbl.js"></script>
</head>
<body>
<div id="main">
<div class="box">
<div class="pic">
<img src="img/0.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/1.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/2.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/3.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/4.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/5.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/6.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/7.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/8.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/9.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/11.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/12.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/13.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/14.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/15.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/16.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/17.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/10.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/18.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/19.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/20.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/21.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/22.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/23.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/24.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/25.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/26.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/27.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/28.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/29.jpg" alt="">
</div>
</div>
</div>
</body>
</html>
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: 0 0 5px #ccc;
}
.pic img{
width: 180px;
height: auto;
}
js代码
window.onload = function () {
waterfall("main", "box");
var dataInt = {
"data":[{"src":"0.jpg"},{"src":"1.jpg"},{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpg"},{"src":"7.jpg"},{"src":"8.jpg"},{"src":"9.jpg"},{"src":"10.jpg"},{"src":"11.jpg"},{"src":"12.jpg"},{"src":"13.jpg"},{"src":"14.jpg"},{"src":"15.jpg"},{"src":"16.jpg"}]
};
window.onscroll = function(){
if(checkScrollSlide){
var oParent = document.getElementById('main');
for(var i=0;i<dataInt.data.length;i++){
var oBox = document.createElement('div');
oBox.className = 'box';
oParent.appendChild(oBox);
var oPic = document.createElement('div');
oPic.className = 'pic';
oBox.appendChild(oPic);
var oImg = document.createElement('img');
oImg.src = "img/"+dataInt.data[i].src;
oPic.appendChild(oImg);
}
waterfall("main", "box");
}
}
}
function waterfall(parent, box) {
// 将main下的所有class为box的元素取出来
var oParent = document.getElementById(parent);
var oBoxs = getByclass(oParent, box);
console.log(oBoxs.length)
//计算整个页面显示的列数(页面宽/box宽)
var oBoxW = oBoxs[0].offsetWidth;
var cols = Math.floor(document.documentElement.clientWidth/oBoxW);
console.log(cols)
// 设置main的宽度
oParent.style.cssText="width:"+oBoxW*cols+"px;margin:0 auto;";
var hArr = [];//存放每一列高度的数组
for(var i=0;i<oBoxs.length;i++){
if(i<cols){
hArr.push(oBoxs[i].offsetHeight);
}else{
var minH = Math.min.apply(null,hArr);
var index = getMinhIndex(hArr,minH);
oBoxs[i].style.position="absolute";
oBoxs[i].style.top=minH+"px";
// oBoxs[i].style.left=oBoxW*index+ "px";
oBoxs[i].style.left=oBoxs[index].offsetLeft+ "px";
hArr[index]+=oBoxs[i].offsetHeight;
}
}
console.log(hArr)
}
// 根据class获取元素
function getByclass(parent,clsName){
var boxArr = new Array(),//用来存储获取到的所有为box的元素
oElements = parent.getElementsByTagName('*');
for(var i=0;i<oElements.length;i++){
if(oElements[i].className == clsName){
boxArr.push(oElements[i]);
}
}
return boxArr;
}
function getMinhIndex(arr,val){
for(var i in arr){
if(arr[i] == val){
return i;
}
}
}
// 检测是否具备加载数据条件
function checkScrollSlide(){
var oParent = document.getElementById('main');
var oBoxs = getByclass(oParent,'box');
var lastBoxH = oBoxs[oBoxs.length-1].offsetTop+Math.floor(oBoxs[oBoxs.length-1].offsetHeight/2);
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
var height = document.body.clientHeight || document.documentElement.clientHeight;
return (lastBoxH<scrollTop+height)?true:false;
}
。。。。。。。。。。。。。。。分割线。。。。。。。。。。。。。。。。。。。。。。。。。
有一种简单的css3布局的方法,基本实现需求
html代码
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>纯CSS3实现的瀑布流</title>
<link type="text/css" rel="stylesheet" href="css/waterfall.css" />
</head>
<body>
<div class="container">
<div><img src="images/P_00.jpg" /></div>
<div><img src="images/P_01.jpg" /></div>
<div><img src="images/P_02.jpg" /></div>
<div><img src="images/P_03.jpg" /></div>
<div><img src="images/P_04.jpg" /></div>
<div><img src="images/P_05.jpg" /></div>
<div><img src="images/P_06.jpg" /></div>
<div><img src="images/P_07.jpg" /></div>
<div><img src="images/P_08.jpg" /></div>
<div><img src="images/P_09.jpg" /></div>
<div><img src="images/P_010.jpg" /></div>
<div><img src="images/P_011.jpg" /></div>
<div><img src="images/P_012.jpg" /></div>
<div><img src="images/P_013.jpg" /></div>
<div><img src="images/P_014.jpg" /></div>
<div><img src="images/P_015.jpg" /></div>
<div><img src="images/P_016.jpg" /></div>
<div><img src="images/P_017.jpg" /></div>
<div><img src="images/P_018.jpg" /></div>
<div><img src="images/P_019.jpg" /></div>
<div><img src="images/P_05.jpg" /></div>
<div><img src="images/P_06.jpg" /></div>
<div><img src="images/P_07.jpg" /></div>
<div><img src="images/P_08.jpg" /></div>
<div><img src="images/P_09.jpg" /></div>
<div><img src="images/P_010.jpg" /></div>
<div><img src="images/P_011.jpg" /></div>
<div><img src="images/P_012.jpg" /></div>
<div><img src="images/P_013.jpg" /></div>
<div><img src="images/P_05.jpg" /></div>
<div><img src="images/P_06.jpg" /></div>
<div><img src="images/P_07.jpg" /></div>
<div><img src="images/P_08.jpg" /></div>
<div><img src="images/P_09.jpg" /></div>
<div><img src="images/P_010.jpg" /></div>
<div><img src="images/P_011.jpg" /></div>
<div><img src="images/P_012.jpg" /></div>
<div><img src="images/P_013.jpg" /></div>
<div><img src="images/P_03.jpg" /></div>
<div><img src="images/P_04.jpg" /></div>
<div><img src="images/P_05.jpg" /></div>
<div><img src="images/P_06.jpg" /></div>
<div><img src="images/P_07.jpg" /></div>
<div><img src="images/P_08.jpg" /></div>
<div><img src="images/P_09.jpg" /></div>
</div>
</body>
</html>
css代码
.container{
-webkit-column-width:160px;
-moz-column-width:160px;
-webkit-column-gap:5px;
-moz-column-gap:5px;
}
/*数据块 砖块*/
.container div{width:160px;
margin:4px 0;}