文字注释在代码中
先放入几张图片
获取浏览器界面的宽
获取一张图片的宽度
以上两者相除,用Math.floor就可以取到整数,即一行可以放的张数
用懒加载在进行下拉时显示图片DOM案例.懒加载
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
.container{
margin: 0 auto;
height: auto;
position: relative;
}
.item{
width:200px;
height:auto;
padding: 10px;
position:absolute;
}
.Picture{
padding:10px;
border: 3px solid rgb(162, 182, 215);
box-shadow: 0 0 5px 5px rgb(197, 198, 198);
}
.Picture img{
width:100%;
}
</style>
</head>
<body>
<div class="container" id="con">
<div class="item">
<div class="Picture">
<img src="./Background-1.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./Background-4.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./蓝色音乐.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./小雏菊.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="QQ图片20231115205718.jpg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./Background-1.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./Background-4.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./蓝色音乐.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./小雏菊.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="QQ图片20231115205718.jpg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./Background-1.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./Background-4.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./蓝色音乐.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./小雏菊.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="QQ图片20231115205718.jpg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./Background-1.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./Background-4.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./蓝色音乐.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./小雏菊.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="QQ图片20231115205718.jpg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./Background-1.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./Background-4.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./蓝色音乐.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./小雏菊.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="QQ图片20231115205718.jpg">
</div>
</div>
</div>
<script>
window.onload = function () {
waterFall();
//监听屏幕滚动
var container = document.getElementById('con');
document.onscroll = function(){
var item = document.getElementsByClassName('item');
if(item[item.length-1].getBoundingClientRect().top < window.innerHeight){
container.innerHTML += `
<div class="item">
<div class="Picture">
<img src="./Background-1.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./小雏菊.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./蓝色音乐.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="./Background-4.jpeg">
</div>
</div>
<div class="item">
<div class="Picture">
<img src="QQ图片20231115205718.jpg">
</div>
</div>
`;
waterFall();
}//getBoundingClientRect返回元素大小及其位置
}
window.onresize = function(){
waterFall();
}//跟随浏览器界面
}
function waterFall(){
// 设置容器宽度→拿到浏览器界面的宽度,再拿到一个item的宽度,然后相除
// 用Math得到一行能排列的个数
var container = document.getElementById('con');
var item = document.getElementsByClassName('item');
var clientWidth = document.documentElement.clientWidth;
var columnCount = Math.floor(clientWidth/item[0].offsetWidth)
container.style.width = columnCount*item[0].offsetWidth+"px";
//如何排列,第一行整体的top都为0,再往下的每一次排列,都要找到上一行高度最小的那个去插空
let hrr = [];
for(let i = 0;i < item.length;i++){
if(i<columnCount){
//第一行
item[i].style.top= "0px";
item[i].style.left= i * item[0].offsetWidth + "px";
//把第一行的每一个高度加进去:用push
hrr.push(item[i].offsetHeight);
}else{
//第一行之后的
//设置一个min,找到Math里面的最小
var min = Math.min(...hrr);//...为扩展运算符
var index = hrr.indexOf(min)
item[i].style.top= min + "px";
item[i].style.left= index * item[0].offsetWidth + "px";
//到以上这一部分,它会把所有的下一行的照片都排列在第一行的最短的那一张图片下面
//所以要把下面加了一张图片的那个位置的元素的高度,更新为加了图片之后的高度
hrr[index] += item[i].offsetHeight;
}
}
}
</script>
</body>
</html>