<!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;
list-style: none;
}
ul {
900px;
margin: 0 auto;
display: flex;
justify-content: space-around;
}
ul li {
200px;
/* min-height: 500px; */
background-color: pink;
}
ul li img {
200px;
margin-bottom: 10px;
display: block;
}
</style>
</head>
<body>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<script>
// 数组,存储100张图片的地址
var arr = new Array(100).fill(0).map((item, index) => `imgs/${index}.png`).sort(a => Math.random() < 0.5 ? 1 : -1);
// 获取所有的li
var lis = document.getElementsByTagName('li');
// 数组的每一个成员代表一个li的高度
var height_arr = [0, 0, 0, 0];
// 向页面中,渲染图片
arr.forEach(url => {
// 加载图片
var img = new Image();
// 哪个li矮,向哪个li插入图片
// 图片加载之后就知道图片的高度
img.onload = function() {
// 图片等比例缩放: 图片真实宽高比与li中图片宽高比是一样的
// img.width / img.height = li(img.width) / li(img.height)
var height = 200 * img.height / img.width;
// 获取最矮li的序号
var index = getMin(height_arr, 4);
// 向页面中渲染图片
lis[index].appendChild(img);
// 更新高度, 图片有底边的边距是10
height_arr[index] += height + 10;
}
// 设置地址
img.src = url;
})
// 实现获取最矮li的方法
function getMin(arr, num) {
// 默认第一个li最矮
let index = 0;
// 第一个成员高度
let height = arr[0];
// 比较数组每一个成员的高度
for (var i = 0; i < num; i++) {
// 第i个成员,高度比当前的还要小呢
if (height > arr[i]) {
// 更新最小高度,以及索引值了
index = i;
height = arr[i];
}
}
// 返回索引值
return index;
}
</script>
</body>
</html>