jQuery实现瀑布流布局

本文详细解析了一段JavaScript代码,用于实现瀑布流布局。首先获取容器宽度和图片盒子宽度,然后计算每行能放置的图片数量。接着通过遍历图片,分别处理第一行和其他行的图片放置,动态调整图片位置,使其呈现出瀑布流效果。代码中使用了jQuery库,并注重了CSS样式设置,确保布局的正确呈现。
摘要由CSDN通过智能技术生成

实现过程

 

  1. 封装获取函数(注意:不要忘记调用
  2. 获取容器(浏览器可视页面)宽度-cw(只需获取自身真实宽度即可)
  3. 获取图片所在小盒子宽度-aw(需获取包含边框+内外边距+自身宽度)
  4. 获取每行存储图片的个数cw/aw
  5. 声明一个空数组放置图片位置
  6. 确定第一行图片所在位置      
  7. 遍历 获取each(function(index,domobj){})  //index代表图片索引,domobj     代表当前选中图片
  8. 存储图片高度 imgArr.push($(domobj).outerHeight(true))
  9. 放置其它图片
  10. 确定第一行放置图片的最小高度minHeight = Math.min.arr(null,imgArr)
  11. 确定最小高度图片的位置minIndex = imgArr.indexOf(minHeight)
  12. 更新图片位置 imgArr[minIndex] += $(domobj).outerHeight(true)

   注:在设置css样式时要注意给图片所在盒子设置定位,js要引入函数库 

手写笔记 

 js代码

<script>
        window.onload = function(){


            /**
             * 瀑布流函数
             */
            function fn(){
                // 获取容器宽度
                var $cw = $("#container").width()
                // 获取图片盒子宽度
                var $aw = $(".album").eq(0).outerWidth(true)

                // 一行能放置多少张图片
                var _col = Math.floor($cw/$aw)

                console.log(_col,"一行放置图片数")
                // 放置图片
                var imgArr = []
                // 遍历循环
                $(".album").each(function(index,domobj){
                    // 第一行放置
                    if(index < _col){
                        $(domobj).css({
                            left:index * $aw,
                            top:0    
                        })
                        imgArr.push($(domobj).outerHeight(true))
                    }else{
                        // 剩下的图片放置
                        // 获取第一行图片最小高度
                        var _minHeight = Math.min.apply(null ,imgArr)
                        // 获取第一行图片最小高度的位置
                        var _minIndex = imgArr.indexOf(_minHeight)
                        $(domobj).css({
                            left : _minIndex * $aw,
                            top: _minHeight

                        })
                        imgArr[_minIndex] += $(domobj).outerHeight(true)

                    }
                })
            }
            fn()
        }
    </script>

     完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        #container{
            position: relative;
        }
        .album{
            width: 200px;
            height: auto;
            border: 1px solid;
            border-radius: 5px;
            padding: 5px;
            box-shadow: #888 0 0 3px;
            position: absolute;
            margin: 5px;
        }
        img{
            width: 200px;
            height: auto;
        }
    </style>
</head>
<body>
    <div id="container">
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
        <div class="album"><img src="./images/x (17).jpg" alt=""></div>
        <div class="album"><img src="./images/x (18).jpg" alt=""></div>
        <div class="album"><img src="./images/x (19).jpg" alt=""></div>
        <div class="album"><img src="./images/x (20).jpg" alt=""></div>
        <div class="album"><img src="./images/x (21).jpg" alt=""></div>
        <div class="album"><img src="./images/x (22).jpg" alt=""></div>
        <div class="album"><img src="./images/x (23).jpg" alt=""></div>
        <div class="album"><img src="./images/x (24).jpg" alt=""></div>
        <div class="album"><img src="./images/x (25).jpg" alt=""></div>
    </div>

    <script src="./js/libs/jQuery/jquery.js"></script>
    <script>
        window.onload = function(){
            function fn(){
                // 获取容器宽度  width 自身实际宽度不包含边框和内外边距
                var $cw = $("#container").width()
                // 获取图片盒子宽度
                var $aw = $(".album").eq(0).outerWidth(true)

                // 一行放置多少照片
                var col = Math.floor($cw/$aw)
                console.log(col,"一行放置图片数 ")

                // 放置图片
                var imgArr = []
                // 遍历(循环)确定图片放置位置  里面index代表放置图片的索引  domobj代表当前选中的图片
                $(".album").each(function(index,domobj){
                    // 
                    if(index <col){
                        // 放置第一行图片
                        $(domobj).css({
                            // 当前图片距左边的距离  以便确定图片位置
                            left:index * $aw,
                            top:0
                        })
                        // 存储图片高度  outerHeight 图片的内外边距+边框+自身高度
                        imgArr.push($(domobj).outerHeight(true))
                    }else{
                        // 放置后续图片
                        // 获取第一行图片中高度最低的图片高度  ull无关紧要的参数,未使用就写null表示参数传值为空
                        var _minHeight = Math.min.apply(null,imgArr)
                        // 获取图片高度最小的那个位置  indexOf 查找
                        var _minIndex = imgArr.indexOf(_minHeight)

                        $(domobj).css({
                            left:_minIndex * $aw,
                            top : _minHeight
                        })

                        // 更新高度
                        imgArr[_minIndex] += $(domobj).outerHeight(true)
                    }
                })

            }
            fn()
        }
    </script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值