原生js实现图片瀑布流(图片加载不及时,高度获取不到(采用onload和递归函数解决))
HTML/CSS代码
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
body,
ul,
li,
dl,
dt,
dd,
p {
margin: 0;
padding: 0;
list-style: none;
}
#wrap {
width: 1000px;
border: 2px solid black;
margin: 0 auto
}
ul {
width: 20%;
float: left;
overflow: hidden;
}
ul>li {
height: auto;
}
img {
width: 100%;
height: 100%;
font-size: 0px;
}
</style>
</head>
<body>
<div id="wrap">
<ul>
<!-- <li><img src="./imgs/1.jpg" alt=""></li> -->
</ul>
<ul>
<!-- <li> <img src="./imgs/21.jpg" alt=""></li> -->
</ul>
<ul>
<!-- <li><img src="./imgs/7.jpg" alt=""></li> -->
</ul>
<ul>
<!-- <li><img src="./imgs/2.jpg" alt=""></li> -->
</ul>
<ul>
<!-- <li><img src="./imgs/3.jpg" alt=""></li> -->
</ul>
</div>
</body>
JS代码
<script>
window.onload = function () {
// 获取DOM
let uls = document.querySelectorAll("#wrap ul");
// 随机数
function rand(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// 随机颜色
function randColor() {
let r = Math.floor(Math.random() * 256);
let g = Math.floor(Math.random() * 256);
let b = Math.floor(Math.random() * 256);
return `rgb(${r},${g},${b})`
}
// 计算最短的列
let num = 0;
function init() {
num++;
let index = 0;
for (var i = 0; i < uls.length; i++) {
if (uls[index].offsetHeight > uls[i].offsetHeight) {
index = i;
}
}
let li = document.createElement("li");
let p = document.createElement("p");
let text = document.createTextNode(num);
let img = document.createElement("img");
img.setAttribute("src", `./imgs/${rand(12, 24)}.jpg`);
p.appendChild(text);
li.appendChild(p);
li.appendChild(img);
uls[index].appendChild(li);
// 重点!通过onload图片加载完成后重复调用函数
img.onload = function () {
if (num < 100) init();
}
}
init()
}
</script>

浙公网安备 33010602011771号