WEB-HTML+CSS+JS-瀑布流-1

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>時間對象</title>
</head>
<body>
<div id="container">
    <div class="box">
        <div class="box_img">
            <img src="img/1.jpg">
        </div>
    </div>
    <div class="box">
        <div class="box_img">
            <img src="img/2.jpg">
        </div>
    </div>
    <div class="box">
        <div class="box_img">
            <img src="img/3.jpg">
        </div>
    </div>
    <div class="box">
        <div class="box_img">
            <img src="img/4.jpg">
        </div>
    </div>
    <div class="box">
        <div class="box_img">
            <img src="img/5.jpg">
        </div>
    </div>
</div>
</body>
</html>

CSS:

*{
    margin: 0px;
    padding: 0px;
}
#container{
    position: relative;
}
.box{
    padding: 5px;
    float: left;
}
.box_img{
    padding: 5px;
    border: 1px solid #000000;
    box-shadow: 0 0 5px #cccc0c;
    border-radius: 5px;
}
.box_img img{
    width: 150px;
    height: auto;
}

JS:

window.onload=function (){
    imgLocation("container","box")
    var imgData={"data":[{"src":"2.jpg"},{"src":"3.jpg"}]};
    window.onscroll=function () {
        if (checkFlag()){
            var cparent = document.getElementById("container");
            for (var i=0;i<imgData.data.length;i++){
                var ccontent = document.createElement("div");
                ccontent.className="box";
                cparent.appendChild(ccontent);
                var boximg=document.createElement("div");
                boximg.className="box_img";
                ccontent.appendChild(boximg);
                var img = document.createElement("img");
                img.src = "img/"+imgData.data[i].src;
                boximg.appendChild(img);
            }
            imgLocation("container","box");
        }
    }
}

//計算最後一張圖片距離頂部的高度
function checkFlag() {
    var cparent=document.getElementById("container");
    var ccontent=getChildElement(cparent,"box");
    var lastContentHeight=ccontent[ccontent.length-1].offsetTop;
    //滾動條滾動的高度
    //console.log(lastContentHeight);
    var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
    //頁面的高度
    //console.log(scrollTop);
    var pageHeight=document.documentElement.clientHeight||document.body.clientHeight;
    //console.log(lastContentHeight+":"+scrollTop+":"+pageHeight);
    if (lastContentHeight<scrollTop+pageHeight){
        return true;
    }
}

function imgLocation(parent,content) {
    //將parent下多有的content全部取出
    var cparent=document.getElementById(parent);
    var ccontent=getChildElement(cparent,content);
    var imgWidth=ccontent[0].offsetWidth;
    var num=Math.floor(document.documentElement.clientWidth / imgWidth);
    cparent.style.cssText="width:"+imgWidth*num+"px;margin:0 auto";

    //將第二排圖片放在第一排最小的圖片下方
    var BoxHeightArr=[];
    for (var i=0;i<ccontent.length;i++){
        if (i<num) {
            BoxHeightArr[i] = ccontent[i].offsetHeight;
            //收集圖片的高度.
            //console.log(BoxHeightArr[i]);
        }else{
            //選擇最小
            var minheight=Math.min.apply(null,BoxHeightArr);
            var minIndex =getminheightLocation(BoxHeightArr,minheight);
            ccontent[i].style.position="absolute";
            ccontent[i].style.top=minheight+"px";
            //依次尋找最小高度的圖片,然後放置在下面.
            ccontent[i].style.left=ccontent[minIndex].offsetLeft+"px";
            BoxHeightArr[minIndex]=BoxHeightArr[minIndex]+ccontent[i].offsetHeight;
        }
    }
}

function getminheightLocation(BoxHeightArr,minHeight) {
    for (var i  in BoxHeightArr){
        if(BoxHeightArr[i]==minHeight){
            return i;
        }
    }

}

function getChildElement(parent,content) {
    var contentArr=[];
    var allcontent=parent.getElementsByTagName("*");
    for (var i=0;i<allcontent.length;i++){
        if (allcontent[i].className ==content){
            contentArr.push(allcontent[i]);
        }
    }
     return contentArr;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章