html:
<div id="container" class="">
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/item1.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/item2.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/item3.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/item4.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/itemActive1.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/itemActive2.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/itemActive4.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/item1.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/item2.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/item3.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/item4.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
<div class="box">
<div class="box-img">
<div class="img">
<img src="../static/img/item1.png" alt="">
<p>爱看的救护车将碍事的合成法可接受的</p>
</div>
</div>
</div>
</div>
css:
#container{
position:relative;
width:100%;
}
.box{
float:left;
padding:5px;
width:48%;
}
.box-img{
padding:5px;
border:1px solid #ccc;
box-shadow:0 0 5px #ccc;
border-radius:5px;
}
.box-img .img{
width:100%;
height:auto;
transition:all 0.6s;
}
.box-img .img img{
width:100%;
height:auto;
}
.box-img .img p{
line-height:40px;
font-size:14px;
}
js:
window.onload = function () {
// imgLocation('container', 'box');
// 模仿数据
var imgData = {"data": [{"src":"item1.png"},{"src":"item2.png"},{"src":"item3.png"},{"src":"item4.png"},{"src":"itemActive4.png"}]};
window.onscroll = function () {
if (checkFlag()) {
var cparent = document.getElementById("container");
for (var i =0; i<imgData.data.length; i++) {
var ccontent = document.createElement('div');
ccontent.className = 'box';
cparent.appendChild(ccontent);
var boxImg = document.createElement('div');
boxImg.className = 'box-img';
ccontent.appendChild(boxImg);
var BImg = document.createElement('div');
BImg.className = 'img';
boxImg.appendChild(BImg);
var img = document.createElement("img");
BImg.style.cssText = 'opacity: 0; transform:scale(0)';
img.src = "../static/img/" + imgData.data[i].src + "";
BImg.appendChild(img);
var p = document.createElement("p");
p.innerText = '爱看的救护车将碍事的合成法可接受的';
BImg.appendChild(p);
(function(BImg){ // 自执行程序闭包
setTimeout(function(){
BImg.style.cssText="opacity:1;transform:scale(1)";
},1000); // 这里的时间自定,我是为了测试才写的1000
})(BImg);
}
// imgLocation('container', 'box');
}
}
function imgLocation(parent, content) {
debugger
// 将parent下面的所有content全部取出
var cparent = document.getElementById(parent);
var ccontent = getChildElement(cparent, content);
// 完善图片布局
var imgWidth = ccontent[0].offsetWidth; // 图片的宽度
var num = Math.floor(document.documentElement.clientWidth / imgWidth); // 横排的显示个数
cparent.style.cssText = "width:" + imgWidth * num + "px;margin: 0 auto"; // 给父级添加宽度
// 计算图片的高度
var boxHeightArr = [];
for (var i=0; i<ccontent.length; i++) {
if(i < num) {
boxHeightArr[i] = ccontent[i].offsetHeight;
console.log(boxHeightArr);
} else {
var minHeight = getMin(boxHeightArr); //最小的高度
var minIndex = getMinheightLocation(boxHeightArr, minHeight);
ccontent[i].style.position = 'absolute';
ccontent[i].style.top = minHeight + 'px';
ccontent[i].style.left = ccontent[minIndex].offsetLeft + 'px';
boxHeightArr[minIndex] = boxHeightArr[minIndex] + ccontent[i].offsetHeight; // 更新最小高度
}
}
}
function getMin(arr) { // 得到图片的最小高度
for(var i=0, ret=arr[0]; i<arr.length; i++) {
ret = Math.min(ret, arr[i]); // 依次将最小值赋值给ret,ret始终最小
}
return ret;
}
function getMinheightLocation(boxHeightArr, minHeight) { // 得到图片最小高度的序列号
for (var i in boxHeightArr) {
if ( boxHeightArr[i] === minHeight) {
return i;
}
}
}
function getChildElement(cparent, content) { // 得到子集空间
var contentArr = [];
var allcontent = cparent.getElementsByTagName('*'); // 获取到所有的元素
for (var i=0; i<allcontent.length; i++ ) {
if (allcontent[i].className === content) {
contentArr.push(allcontent[i]);
}
}
return contentArr;
}
function checkFlag() {
var cparent = document.getElementById('container');
var ccontent = getChildElement(cparent, "box");
// 数组最后一个元素的高度距离顶部的距离
var lastContentHeight = ccontent[ccontent.length-1].offsetTop;
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
var pageHeight = document.documentElement.clientHeight || document.body.scrollHeight;
if(lastContentHeight < scrollTop + pageHeight){
return true;
}
}
};
注: 其中注释掉的imgLocation方法为瀑布流效果,如果是高度大小不一的图片可尝试一下瀑布流。
网友评论