瀑布流布局(jq实现)

参考刘晓帆大神的瀑布流效果 自己也写了个 希望能给打算写这个效果的朋友一点点思路,也希望朋友们批评指正!

html代码:

<!DOCTYPE html>
<html>
<head>
<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="script.js"></script>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="z-box">
    <ul>
        <li>
            <h3>1A</h3>
            <a>aa</a>
            <a>aa</a>
            <a>aa</a>
        </li>
        <li>
            <h3>2B</h3>
            <a>bb</a>
        </li>
        <li>
            <h3>3C</h3>
            <a>cc</a>
            <a>cc</a>
            <a>cc</a>
            <a>cc</a>
        </li>
        <li>
            <h3>4D</h3>
            <a>dd</a>
            <a>dd</a>
            <a>dd</a>
            <a>dd</a>
            <a>dd</a>
            <a>dd</a>
            <a>dd</a>
        </li>
        <li>
            <h3>5E</h3>
            <a>ee</a>
            <a>ee</a>
            <a>ee</a>
            <a>ee</a>
            <a>ee</a>
        </li>
        <li>
            <h3>6F</h3>
            <a>ff</a>
            <a>ff</a>
            <a>ff</a>
        </li>
        <li>
            <h3>7G</h3>
            <a>GG</a>
            <a>GG</a>
            <a>GG</a>
        </li>
        <li>
            <h3>8E</h3>
            <a>ee</a>
            <a>ee</a>
            <a>ee</a>
            <a>ee</a>
            <a>ee</a>
        </li>
        <li>
            <h3>9F</h3>
            <a>ff</a>
            <a>ff</a>
            <a>ff</a>
        </li>
        <li>
            <h3>10G</h3>
            <a>GG</a>
            <a>GG</a>
            <a>GG</a>
        </li>
    </ul>
</div>
</body>
</html>
View Code

css代码:

*{
    margin:0px;
    padding:0px;
    font-size:12px;
}
body{
    background:pink;
}
li{
    list-style:none;
}
.z-box{
    width:300px;
    height:auto;
    box-shadow:0px 0px 1px red;
    margin:0 auto;
    position:relative;
}
.z-box ul{

}
.z-box ul li{
    width:44px;
    text-align:center;
    position:absolute;
    background:#f3f3f3;
    top:0px;
    left:40%;
    transition:all 0.5s;
    -webkit-transition:all 0.5s;
    -o-transition:all 0.5s;
    -ms-transition:all 0.5s;
    -moz-transition:all 0.5s;

}
.z-box ul li a{
    display:block;
    width:44px;
    

}
View Code

javascript代码:

$(function(){

    var $oLi=$(".z-box > ul li");    //jq对象
    var dWidth=$(".z-box").outerWidth();
    var lWidth=$oLi.outerWidth()+5;    //li的宽度+间距
    var col=Math.round(dWidth/(lWidth+10));    //列数+间距
    console.log(col);

    var array=[];    //存放列坐标的数组

    for(var i=0;i<col;i++){
        array.push([i*lWidth,0]);    //初始化列的坐标
    }

    $oLi.each(function(){    //遍历每一个单位
        
        var _temp=0;    //最低列暂存体
        var _height=$(this).outerHeight();    //获取当前单位的高度

        for(var j=0;j<col;j++){
            if(array[j][1]<array[_temp][1]){
                _temp=j;    //比较哪列是最低索引
            }
        }

        $(this).css({"left":array[_temp][0]+"px","top":array[_temp][1]+"px"});    //设置单位的坐标
        array[_temp][1] = array[_temp][1] + _height+5;    //计算列的最低坐标
    
    });    
    
    //获取最高top
    var nLi=[],
        n=0,
          max=0,
        nHeight;
    for(var i=0;i<col;i++){
        if(array[i][1]>array[n][1]){
            n=i;
            max=array[i][1]-5;
        }
    }

    for(var j=0;j<col;j++){
        if(array[j][1]>array[n][1]){
            n=j;
            $(".z-box").css("height",array[j][1]-5+"px");
            console.log("min="+j);

        }else{
            nHeight=max-array[j][1];
            nLi[j]=document.createElement("li");
            $(nLi[j]).css("height",nHeight);
            $(nLi[j]).css({"left":array[j][0]+"px","top":array[j][1]+"px"});
            $(".z-box > ul").append(nLi[j]);
            console.log("max="+j);
        }
    }
});

 

转载于:https://www.cnblogs.com/dream-w/p/5204384.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值