js实现瀑布流

HTML部分

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>瀑布流测试2</title>
    <link rel="stylesheet" href="css/main.css">
    <script src="js/main.js"></script>
</head>
<body>
<div id="neirong">
    <div class="box">
        <div class="img_box">
            <img src="image/a.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/b.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/c.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/d.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/e.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/f.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/a.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/b.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/c.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/d.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/e.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/f.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/a.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/b.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/c.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/d.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/e.jpg">
        </div>
    </div>

    <div class="box">
        <div class="img_box">
            <img src="image/f.jpg">
        </div>
    </div>
</div>
</body>
</html>

JS部分

window.onload=function () {
    tp_paixu("neirong","box");
    /*{"data":[{"src","image/a.jpg"},]};*/
    var data=[{"src":"image/a.jpg"},{"src":"image/b.jpg"},{"src":"image/c.jpg"},{"src":"image/d.jpg"},{"src":"image/e.jpg"},{"src":"image/f.jpg"}];
    window.onscroll=function () {
        if(getOnscroll()){
            var zhukuangjia=document.getElementById("neirong");

            for (var i=0;i<data.length;i++){
                var div1=document.createElement("div");
                div1.className="box";
                zhukuangjia.appendChild(div1);

                var div2=document.createElement("div");
                div2.className="img_box";
                div1.appendChild(div2);

                var img1=document.createElement("img");
                img1.src= data[i].src;
                div2.appendChild(img1);
            }
        }
        tp_paixu("neirong","box");
    }



}
function getOnscroll() {         //获取滚动条状态的函数
    /*var zhukuangjia=document.getElementById("neirong");*/
    var ZiBoxAll=document.getElementsByClassName("box");
    var lastTop=ZiBoxAll[ZiBoxAll.length-1].offsetTop;       //获取最后一个盒子的顶部距离
    var OnscrollTop=document.documentElement.scrollTop||document.body.scrollTop; //滚动条顶部距离
    var screenHeight=document.documentElement.clientHeight||document.body.clientHeight;  //获取屏幕高度
    if(lastTop<OnscrollTop+screenHeight){
        return true;
    }
}



function tp_paixu(fu,zi) {                   //图片排列方法
    var fu1 = document.getElementById(fu);
    var ZiBoxAll = document.getElementsByClassName(zi);
    var img_width=ZiBoxAll[0].offsetWidth;
    var cols=Math.floor(1200/img_width);    //每行的个数
    var needWidth=cols*img_width;           //实际需要的宽度
    fu1.style.cssText="width:"+needWidth+"px;margin:auto;";  //给最大的内容盒子设置宽度
    var BoxHeightAll=new Array();          //存放高度的数组
    for(var i=0;i<ZiBoxAll.length;i++){
        if(i<cols){
            BoxHeightAll[i]=ZiBoxAll[i].offsetHeight;   //把第一行几个盒子的高度給数组
        }
        else {
            var minHeight=Math.min.apply(null,BoxHeightAll);   //返回第一行几个盒子中的最小值
            var minHeightPos=getMinHeightPos(BoxHeightAll,minHeight);  //返回最小高度盒子在第一行中的位置
            ZiBoxAll[i].style.position="absolute";                  //第二行第一个盒子接在第一行高度最小的盒子下面
            ZiBoxAll[i].style.top=minHeight+"px";
            ZiBoxAll[i].style.left=ZiBoxAll[minHeightPos].offsetLeft+"px";

            BoxHeightAll[minHeightPos]+=ZiBoxAll[i].offsetHeight;   //原来最小高度换掉 不是最小的
        }
    }
}

function getMinHeightPos(array,minHeight) {    //获取最小高度在数组里的位置的方法
    for (var i in array){
        if(array[i]==minHeight){
            return i;
        }
    }
}

CSS部分

*{
    padding: 0px;
    margin: 0px;
}

#neirong{
    position: relative;
}

.box{
    padding: 5px;
    float: left;
}
.img_box{
    padding: 5px;
    border: darkgray 1px solid;
    border-radius: 5px;
}
.img_box img{
    width: 350px;
    height: auto;
}
发布了18 篇原创文章 · 获赞 0 · 访问量 271

猜你喜欢

转载自blog.csdn.net/iTaylorfan/article/details/104345825