js实现瀑布流布局

html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>瀑布流布局JS</title>
    <link rel="stylesheet" href="index.css">
    <script src="../http_code.jquery.com_jquery-2.0.0.js"></script>
</head>
<body>

<div id="main">

    <div class="box">
        <div class="pic">
            <img src="images/0.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/1.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/2.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/3.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/4.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/5.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/6.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/7.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/8.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/9.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/10.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/11.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/12.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/13.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/14.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/15.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/16.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/17.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/18.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/19.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/20.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/21.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/22.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/23.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/24.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/25.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/26.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/27.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/28.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/29.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/30.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/31.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/32.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/90.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/33.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/34.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/35.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/36.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/37.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/38.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/39.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/40.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/41.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/42.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/43.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/44.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/45.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/56.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/47.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/48.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/49.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="images/50.jpg" alt="">
        </div>
    </div>


</div>

<script src="app.js"></script>
</body>
</html>


css代码


*{
    margin:0;
    padding: 0;
}
#main{
    position: relative;
}

.box{
    padding: 15px 0 0 15px;
    float: left;
}
.pic{
    padding: 10px;
    border: 1px solid #cccccc;
    border-radius: 5px;
    box-shadow: 0 0 5px #cccccc;
}
.pic img{
    width: 165px;
    height: auto;
}


js 代码



/**
 * Created by mac on 16/8/19.
 */
window.onload=function () {

     waterfall('main','box');



};

function waterfall(parent,box) {
    //取出main下的class为box取出来

    var oParent=document.getElementById('main');
    var oBoxs=getByClass(oParent,box);
    // console.log(oBoxs.length)
    //计算整个页面的显示列数     页面宽/box宽
    var oBoxW=oBoxs[0].offsetWidth;
    var cols=Math.floor(document.documentElement.clientWidth/oBoxW);
     oParent.style.cssText='width:'+oBoxW*cols+'px:margin:0 auto';

    var hArr=[];
    for(var i=0;i<oBoxs.length;i++){
        if(i<cols){
            hArr.push(oBoxs[i].offsetHeight);
        }else{
            var minH=Math.min.apply(null,hArr);
            // console.log(minH)
            var index= getMinhIndex(hArr,minH);
            oBoxs[i].style.position='absolute';
            oBoxs[i].style.top=minH+'px';
            oBoxs[i].style.left=oBoxW*index+'px';
            hArr[index]+=oBoxs[i].offsetHeight;
        }
    }

}

//根据class获取元素
function getByClass(parent,clsName) {
    var boxArr=new Array();//存储class为box的元素
    var oElements=parent.getElementsByTagName('*');
    for(var i=0;i<oElements.length;i++){
        if(oElements[i].className==clsName){
            boxArr.push(oElements[i]);
        }
    }
    return boxArr;
}


function getMinhIndex(arr,val) {
    for(var i in arr){
        if(arr[i]==val){
            return i;
        }
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值