<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()
console.log(itemWidth)
var num=Math.floor(ww/itemWidth)
console.log(num)
/* 2.将第一排的高度添加到一个数组中 */
var heightArr=[];
$(".item").each((index,item)=>{
if(index<num){
var item=$(item).outerHeight()
heightArr.push(item)
}else{
/* 3.从数组高度最小的地方添加图片 */
var minHeight=Math.min(...heightArr); //最小高度
console.log(minHeight)
var minIndex=heightArr.indexOf(minHeight);
var offsetLeft=$(".item").eq(minIndex).offset().left; //最小高度的item距离左边的偏移量
$(".item").eq(index).css({position:'absolute',top:minHeight,left:offsetLeft})
}
/* 4.重新设置数组的最小高度 */
var height=$(".item").eq(index).outerHeight();
heightArr[minIndex]=minHeight+height;
})
}
</script>
判断是否到达底部
function onReachBottom() {
var sh = $(window).scrollTop();
var wh = $(window).height();
var dh = $(document).height();
return Math.ceil(sh + wh) == dh ? true : false;
}
加载更多
<!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>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.js"></script>
<script src="https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.js"></script>
<style>
* {
margin: 0;
padding: 0
}
.grid-item img {
width: 200px;
padding: 5px;
}
.grid-item {
float: left;
border: 1px solid #eee;
border-radius: 5px;
}
.grid {
width: 80%;
margin-left: auto;
margin-right: auto;
}
.more {
position: fixed;
bottom:5%;
left:50%;
z-index: 100;
text-align: center;
color:red;
}
</style>
</head>
<body>
<div class="grid">
<p class="more">加载更多数据</p>
</div>
</div>
<script>
var url = 'http://yapi.demo.qunar.com/mock/66515/images'
/* init data */
loadMore();
$(window).scroll(function(){
if(isReachBottom()){
loadMore()
}
})
function http(url) {
return $.ajax({
url,
type: 'get',
dataType: 'json',
beforeSend() {
$(".more").show()
}
})
}
function handleData(res) {
var html = ""
$.each(res, (index, item) => {
html += `<div class="grid-item"><img src='${item.imgUrl}' /></div>`;
})
$('.grid').append(html); //加载你的ajax数据到列表
var $grid = $('.grid').masonry({
itemSelector: '.grid-item',
gutter: 10,
isAnimated: true
});
$grid.imagesLoaded().progress(function () {
$grid.masonry('reloadItems'); //初始化
$grid.masonry('layout'); //重新布局
});
$('.more').hide()
}
function loadMore() {
http(url).then(res => {
handleData(res)
})
}
function isReachBottom() {
var dh = $(document).height();
var wh = $(window).height();
var sw = $(window).scrollTop();
return (Math.ceil(wh + sw) == dh) ? true : false;
}
</script>
</body>
</html>