瀑布流的实现原理与实例

一、原理:

          

  1.  计算每一行能够容纳的列数。
  2.  寻找每列之中所有高度之和的最小列
  3.  添加新元素至该列
  4.  循环找,直到结束。

        

<!DOCTYPE html>
<html lang="en">
     <head>
           <meta charset="UTF-8">
           <title></title>
           <script src="jquery-3.2.1.min.js"></script>
           <style>
                div.item {
                     position: absolute;
                     width: 200px;
                     margin: 10px;
                     transition: all 1s;
                }
                
                div#content {
                     position: relative;
                }
                
                .part1 {
                     background-color: yellow;
                     height: 200px;
                }
                
                .part2 {
                     background-color: #006ac1;
                     height: 400px;
                }
                
                .part3 {
                     background-color: blueviolet;
                     height: 300px;
                }
           </style>
     </head>
     <body>
           <div id="content">
                <div class="item part1">1</div>
                <div class="item part2">2</div>
                <div class="item part3">3</div>
                <div class="item part1">4</div>
                <div class="item part1">5</div>
                <div class="item part2">6</div>
                <div class="item part2">7</div>
                <div class="item part3">8</div>
                <div class="item part1">9</div>
                <div class="item part2">10</div>
                <div class="item part2">11</div>
                <div class="item part2">12</div>
                <div class="item part3">13</div>
                <div class="item part3">14</div>
           </div>
           <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js";></script>;
           <script>
                function waterFall() {
                     var widthNum = parseInt($(window).width() / $(".item").outerWidth(true)),//求列数
                           allHeight = [];//所有高度,一维数组
                     for(var i = 0; i < widthNum; i++) {
                           allHeight.push(0)
                     }//给每一列的高度设置初始值为0
                     $(".item").each(function() {
                           var $cur = $(this),
                                indx = 0,//设置最小索引值
                                minAllHeight = allHeight[0];//设置最小高度值
                           for(var j = 0; j < allHeight.length; j++) {
                                if(allHeight[j] < minAllHeight) {
                                     minAllHeight = allHeight[j];
                                     indx = j;
                                }
                           }
                           $cur.css({
                                "left": indx * $cur.outerWidth(true),
                                "top": minAllHeight
                           });
                           allHeight[indx] = minAllHeight + $cur.outerHeight(true);//每一列添加对应高度
                     })
                }
                waterFall();
                $(window).on("resize", function() {
                     waterFall()
                })//改变浏览器大小,调用函数。
           </script>
     </body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值