瀑布流布局

瀑布流布局的特点:宽度固定,高度不固定

如下:
在这里插入图片描述

实现思路:
  1. 每一行添加在高度最低的图片下面
  2. 绝对定位
  • left:图片宽度*索引
  • top:最小高度
  1. 创建一个数组,存放图片高度
  2. 用当前窗口的大小除以每个区域的大小再取整,就可以计算出当前窗口大小下应该展示的图片张数( cols = parseInt($(window).width()/boxWidth) boxWidth为每一个图片的宽度 )
    简单的说就是 可视区域的宽/图片的宽=列数
具体代码:

HTML文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box{
            position: relative;
        }
        .item{
            position: absolute;
            width: 200px;
            margin: 5px;
            border: 1px solid #ddd;
            transition: all 1s ease;
        }
        .item img{
            /*height: 100%;*/
            width: 100%;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="item"><img src="img/1.jpg"></div>
        <div class="item"><img src="img/2.jpg"></div>
        <div class="item"><img src="img/3.jpg"></div>
        <div class="item"><img src="img/4.jpg"></div>
        <div class="item"><img src="img/5.jpg"></div>
        <div class="item"><img src="img/6.jpg"></div>
        <div class="item"><img src="img/7.jpg"></div>
        <div class="item"><img src="img/8.jpg"></div>
        <div class="item"><img src="img/9.jpg"></div>
        <div class="item"><img src="img/10.jpg"></div>
        <div class="item"><img src="img/11.jpg"></div>
        <div class="item"><img src="img/12.jpg"></div>
        <div class="item"><img src="img/13.jpg"></div>
        <div class="item"><img src="img/14.jpg"></div>
        <div class="item"><img src="img/15.jpg"></div>
        <div class="item"><img src="img/16.jpg"></div>
        <div class="item"><img src="img/17.jpg"></div>
        <div class="item"><img src="img/18.jpg"></div>
        <div class="item"><img src="img/19.jpg"></div>
        <div class="item"><img src="img/20.jpg"></div>
        <div class="item"><img src="img/22.jpg"></div>
        <div class="item"><img src="img/23.jpg"></div>
    </div>
    <script src="../js基础/jquery-3.3.1.min.js"></script>
    <script src="index.js"></script>
</body>
</html>

js文件

$(function () {
    init();
    $(window).on("resize",function () { // 窗口改变 重新加载
        init();
    });

});
function init() {
    //每行展示的列数
    //width()不包括padding、margin、border
    //outerWidth(true)包括padding、margin、border
    var boxWidth = $(".item").outerWidth(true); // 每一个宽度
    var cols = parseInt($(window).width()/boxWidth); // 列数
    var heightArr=[];//存放高度
    for(var i=0;i<cols;i++){
        heightArr.push(0); // [0,0,0,...] 初始化数组 cols个0
    }
    $('.item').each(function (index,item) { // 遍历每个区域
        var idx = 0;
        var minBoxHeight = heightArr[0];
        for(var i=0;i<heightArr.length;i++){
            if(heightArr[i] < minBoxHeight){
                minBoxHeight = heightArr[i];
                idx = i;
            }
        }
        $(item).css({
            left:boxWidth*idx,// 每个区域的宽度*索引
            top:minBoxHeight
        });
        heightArr[idx] += $(item).outerHeight(true);//更新列高
    })
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值