<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<style>
.container {
width: 90%
margin: 0 auto
border: 2px solid
position: relative
}
.container img {
position: absolute
/* css3属性,表示过渡效果, 图片的样式变化在0.3秒内完成,而不是瞬间完成 */
transition: 0.3s
width: 220px
}
</style>
</head>
<body>
<div id="container" class="container"></div>
<script>
var divContainer = document.getElementById('container')
var imgWidth = 220
//1. 加入图片元素
function createImgs() {
for (var i = 0
var src = 'img/' + i + '.jpg'
var img = document.createElement('img')
img.onload = setPoisions
img.src = src
divContainer.appendChild(img)
}
}
createImgs()
// 2. 设置每张图片的位置
function setPoisions() {
var info = cal()
var nextTops = new Array(info.columns)
nextTops.fill(0)
for (var i = 0
var img = divContainer.children[i]
//找到nextTops中的最小值作为当前图片的纵坐标
var minTop = Math.min.apply(null, nextTops)
img.style.top = minTop + 'px'
//重新设置数组这一项的下一个top值
var index = nextTops.indexOf(minTop)
nextTops[index] += img.height + info.space
//横坐标
var left = (index + 1) * info.space + index * imgWidth
img.style.left = left + 'px'
}
var max = Math.max.apply(null, nextTops)
divContainer.style.height = max + 'px'
}
/**
* 计算一共有多少列,以及每一列之间的间隙
*/
function cal() {
var containerWidth = divContainer.clientWidth
//计算列的数量
var columns = Math.floor(containerWidth / imgWidth)
//计算间隙
var spaceNumber = columns + 1
var leftSpace = containerWidth - columns * imgWidth
var space = leftSpace / spaceNumber
return {
space: space,
columns: columns,
}
}
// window.onload = setPoisions
var timerId = null
window.onresize = function () {
//窗口尺寸变动后,重新排列
if (timerId) {
clearTimeout(timerId)
}
timerId = setTimeout(setPoisions, 300)
}
</script>
</body>
</html>