原始瀑布流
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<style>
*{margin: 0;padding: 0}
img{
width: 240px;
}
.item{
border: 1px solid #eee;
padding: 20px;
float: left;
}
</style>
所有图片
<div class="content">
<div class="item">
<img src="images/01.jpg" alt="">
</div>
<div class="item">
<img src="images/02.jpg" alt="">
</div>
<div class="item">
<img src="images/03.jpg" alt="">
</div>
<div class="item">
<img src="images/04.jpg" alt="">
</div>
<div class="item">
<img src="images/05.jpg" alt="">
</div>
<div class="item">
<img src="images/06.jpg" alt="">
</div>
<div class="item">
<img src="images/07.jpg" alt="">
</div>
<div class="item">
<img src="images/08.jpg" alt="">
</div>
<div class="item">
<img src="images/09.jpg" alt="">
</div>
<div class="item">
<img src="images/10.jpg" alt="">
</div>
<div class="item">
<img src="images/11.jpg" alt="">
</div>
<div class="item">
<img src="images/12.jpg" alt="">
</div>
</div>
<script>
/* 1.一排能放置几张图片 */
window.onload=function() {
var ww = $(window).width(); //窗口宽度
var itemWidth = $(".item").outerWidth(); //每个item宽度,包括图片的padding,margin
var num = Math.floor(ww / itemWidth); //一排可以放置的图片数
console.log(num)
/* 2.将第一排的高度添加到一个数组中 */
var heightArr = [];
$(".item").each((index,item)=>{
if(index<num){
var itemHeight = $(item).outerHeight() //outheight包括图片的padding
heightArr.push(itemHeight)
}else{
/* 3.从数组高度最小的地方添加图片 */
var minHeight = Math.min(...heightArr);
var minIndex = heightArr.indexOf(minHeight); //高度最小图片的下标
var offsetLeft = $(".item").eq(minIndex).offset().left;
//offsetleft:元素距离左边边框的偏移量 图片包括图片的padding
$(".item").eq(index).css({position:'absolute',top:minHeight,left:offsetLeft});
/* 4.重新设置数组的最小高度 */
var height = $(".item").eq(index).outerHeight();
heightArr[minIndex] = minHeight+height;
}
})
console.log(heightArr)
}
</script>
瀑布流下拉加载
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script src="lib/base.js"></script>
<style>
* {
margin: 0;
padding: 0
}
img {
width: 240px;
}
.item {
border: 1px solid rgb(131, 130, 130);
padding: 20px;
float: left;
}
</style>
lib/base.js
function onReachBottom() { //判断是否到达页面底部
var dh = $(document).height();
var sh = $(window).scrollTop();
var wh = $(window).height();
return (Math.ceil(sh + wh) == dh) ? true : false;
}
<script>
/* 假设是从服务器取得的数据 */
var url = {
dataUrl: [{
src: "01.jpg"
}, {
src: "02.jpg"
}, {
src: "03.jpg"
}, {
src: "04.jpg"
}, {
src: "05.jpg"
}, {
src: "06.jpg"
}, {
src: "07.jpg"
}, {
src: "08.jpg"
}, {
src: "09.jpg"
}, {
src: "10.jpg"
}, {
src: "11.jpg"
}, {
src: "12.jpg"
}]
}
/* 1.一排能放置几张图片 */
window.onload = function () {
place_img();
$(window).scroll(function(){
if(onReachBottom()){
url.dataUrl.forEach(item=>{
let list = `<div class="item"><img src="images/${item.src}"/></div>`
$(".content").append(list);
place_img()
})
}
})
}
function place_img() {
var ww = $(window).width()
var itemWidth = $(".item").outerWidth();
var num = Math.floor(ww / itemWidth);
/* 2.将第一排的高度放置在一个数组中 */
var arrHeight = []
$(".item").each((index, item) => {
if (index < num) {
var itemHeight = $(item).outerHeight();
arrHeight.push(itemHeight)
} else {
/* 3.从高度最小的地方开发放置图片 */
var minHeight = Math.min(...arrHeight);
var minIndex = arrHeight.indexOf(minHeight);
var offsetLeft = $(".item").eq(minIndex).offset().left;
$(".item").eq(index).css({ position: 'absolute', top: minHeight, left: offsetLeft })
/* 4.重置数组中的最小高度 */
arrHeight[minIndex] = minHeight + $(".item").eq(index).outerHeight();
}
})
}
</script>