console
window.onload = function () {
waterfall('main', 'box');
let dataInt = {
"data": [{
"src": "0.jpg"
},
{
"src": "1.jpg"
},
{
"src": "2.jpg"
},
{
"src": "3.jpg"
}]
};
window.onscroll = function () {
if (checkScrollSlide()) {
let oParent = document.getElementById('main');
for (let i = 0; i < dataInt.data.length; i++) {
let oBox = document.createElement('div');
oBox.className = 'box';
oParent.appendChild(oBox);
let oPic = document.createElement('div');
oPic.className = 'pic';
oBox.appendChild(oPic);
let oImg = document.createElement('img');
oImg.src = "./images/" + dataInt.data[i].src;
oPic.appendChild(oImg);
}
waterfall('main', 'box');
}
};
}
function waterfall(parent, box) {
let oParent = document.getElementById(parent);
let oBoxs = getByClass(oParent, box);
let oBoxW = oBoxs[0].offsetWidth;
let cols = Math.floor(document.documentElement.clientWidth / oBoxW);
oParent.style.cssText = 'width: ' + oBoxW * cols + 'px; margin: 0 auto;';
let hArr = [];
for (let i = 0; i < oBoxs.length; i++) {
if (i < cols) {
hArr.push(oBoxs[i].offsetHeight);
} else {
let minH = Math.min.apply(null, hArr);
let index = getMinHIndex(hArr, minH);
oBoxs[i].style.position = 'absolute';
oBoxs[i].style.top = minH + 'px';
oBoxs[i].style.left = oBoxW * index + 'px';
hArr[index] += oBoxs[i].offsetHeight;
}
}
}
function getByClass(parent, clsName) {
let boxArr = new Array();
let oElements = parent.getElementsByTagName('*');
for (let i = 0; i < oElements.length; i++) {
if (oElements[i].className == clsName) {
boxArr.push(oElements[i]);
}
}
return boxArr;
}
function getMinHIndex(arr, val) {
for (let i in arr) {
if (arr[i] == val) {
return i;
}
}
}
function checkScrollSlide() {
let oParent = document.getElementById('main');
let oBoxs = getByClass(oParent, 'box');
let lastBoxH = oBoxs[oBoxs.length - 1].offsetTop + Math.floor(oBoxs[oBoxs.length - 1].offsetHeight / 2);
let scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
let height = document.body.clientHeight || document.documentElement.clientHeight;
return lastBoxH < scrollTop + height ? true : false;
}
<div id="main">
<div class="box">
<div class="pic">
<img src="./images/0.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/1.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/2.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/3.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/4.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/5.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/6.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/7.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/8.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/9.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/10.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/11.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/12.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/13.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/14.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/15.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/16.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/17.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/18.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/19.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/20.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/21.jpg" alt="">
</div>
</div>
<div class="box">
<div class="pic">
<img src="./images/22.jpg" alt="">
</div>
</div>
</div>
* {
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: 165px;
height: auto;
}