用js实现瀑布流布局

2023-11-25

1、前端代码

<!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>waterFall</title>

    <script src="./index.js"></script>

</head>

<style>

    *{

        margin: 0;

        padding: 0;

    }

    .container {

        overflow: hidden;

        position: relative;

    }

    .box{

        float: left;

        padding: 5px;

    }

    .box-img{

        width: 150px;

        padding: 5px;

        border: 1px solid #484848;

        box-shadow: 0 0 5px #484848;

    }

    .box-img img{

        width: 100%;

    }

</style>

<body>

    <div id="container">

        <div class="box">

            <div class="box-img">

                <img src="./img/1.jpg" alt="">

           </div>

        </div>

    </div>

    </body>

</html>

2、js代码

window.onload=function() {

    imgLocation('container','box')

}

function imgLocation(parent,content){

    var cparent=document.getElementById(parent)

    //cparent下的所有的第一层的子容器 box

    var ccontent=getChildElement(cparent,content)//数组,40个div

}

//取到父容器中的某一层子容器

function getChildElement(parent,content){

    var contentArr=[]

    var allContent=parent.getElementsByTagName('*')//通过标签来选中得到一个数组

    //遍历allContent把其中类名为content的容器都存到contentArr数组中

    for(var i=0;i<allContent.length;i++){

        if(allContent[i].className==content){    //当前这个容器的类名是否为content

            contentArr.push(allContent[i])

        }

    }

    return contentArr;

}

//从谁开始是需要被摆放位置的

    var winWidth=document.documentElement.clientWidth;//视窗宽度

    var imgWidth=ccontent[0].offsetWidth;//图片宽度

    var num=Math.floor(winWidth/imgWidth)//第一行能放几张图

 //操作num+1张图

    var BoxHeightArr=[]

    for(var i=0;i<ccontent.length;i++){

        //前num张只要计算高度

        if(i<num){

            BoxHeightArr[i]=ccontent[i].offsetHeight

        }

        else{

            //我们要操作的box  :ccontent[i]

            var minHeight=Math.min.apply(null,BoxHeightArr)

//apply:把最小值这个方法借给它用

   var minIndex=BoxHeightArr.indexOf(minHeight)//返回数组下标

    ccontent[i].style.position='absolute'//style设置样式

    ccontent[i].style.top=minHeight+'px'

    ccontent[i].style.left=imgWidth*minIndex+'px'

   //更新最矮的那一列的高度

    BoxHeightArr[minIndex]+=ccontent[i].offsetHeight

        }

    }


发表评论

  最新评论
© 2024-2030 yunmo.pub 版权所有   |   粤ICP备2023158145号-1
我可是有脾气的!