JavaScript實現(xiàn)圖片自動加載的瀑布流效果

字號:


    這篇文章主要介紹了JavaScript實現(xiàn)圖片自動加載的瀑布流效果的相關資料,需要的朋友可以參考下
    先給大家展示下效果圖:
    名單
    向下滑動網(wǎng)頁的時候能夠自動加載圖片并顯示。
    盛放圖片的盒子模型如下:
     <div>
    <div>
    <img src="Img/8.jpg">
    </div>
    </div>
    設置img-width為150px,然后box_img添加內邊距和陰影效果,box的外邊距為0,添加內邊距。盒子的寬度是由img-width和邊距撐開的。也就是說盒子之間是沒有間距的,但是盒子內部有一些邊距的效果。這樣在js設置位置的時候就不用考慮邊距問題,直接調用box的寬度就可以了。
    設置盛放所有box的div的position為relative,這樣在設置top值或是left值的時候,就不用考慮最外層的margin屬性。
    放置圖片的位置:獲得第一行圖片的高度并且存放在數(shù)組里面,接下來的圖片設置position為absolute,放置在高度最小的圖片的下面,然后設置top和left,并且把數(shù)組的最小值加上新放置的圖片的高度。也就是說HTML里面原始放置的圖片除了第一行以外,其他的圖片都是在js里面又重新定位的。
    當滑動頁面到底部的時候觸發(fā)事件函數(shù),緊接著放置一些圖片,這樣保證圖片的無限加載。
    HTML文件:
    <!DOCTYPE html>
    <html>
    <head lang="en">
    <meta charset="UTF-">
    <title></title>
    <link rel="stylesheet" href="waterfall.css" type="text/css">
    <script src="waterfall.js"></script>
    </head>
    <body>
    <div id="content">
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div >
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div >
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div >
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div >
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div>
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    <div >
    <div>
    <img src="Img/.jpg">
    </div>
    </div>
    </div>
    </body>
    </html>
    CSS文件:
    *{
    margin: ;
    padding:;
    }
    #content{
    position: relative;
    background-color: #;
    }
    .box{
    padding: px;
    float: left;
    }
    .box_img{
    padding: px;
    border: px solid #cccccc;
    box-shadow: px #cccccc;
    border-radius: px;
    }
    img{
    width: px;
    height: auto;
    }
    js文件:
    Math.floor()函數(shù)能夠向下取整。
    Math.min.apply(null,heightArr);函數(shù)能獲得heightArr數(shù)組的最小值。
    window.onscroll=function(){};滑動頁面的時候觸發(fā)這個函數(shù)。
    document.documentElement.clientHeight;瀏覽器顯示出來的高度。
    document.documentElement.scrollTop;滑動的距離。
    /**
    * Created by asua on 2016/4/9.
    */
    window.onload=function(){
    imgLocation("content","box");
    var lodeImage={"Date":[{"src":"1.jpg"},{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpg"},{"src":"7.jpg"},{"src":"8.jpg"},{"src":"9.jpg"},{"src":"10.jpg"},]}
    window.onscroll=function(){
    if(checkFlag()){
    for(var i=0;i<lodeImage.Date.length;i++){
    var box=document.createElement("div");
    box.className="box";
    var cparent=document.getElementById("content");
    cparent.appendChild(box);
    var box_img=document.createElement("div");
    box_img.className="box_img";
    box.appendChild(box_img);
    var img=document.createElement("img");
    img.src="Img/"+lodeImage.Date[i].src;
    box_img.appendChild(img);
    }
    imgLocation("content","box");
    }
    }
    }
    function checkFlag(){
    var cparent=document.getElementById("content");
    var ccontent=getChildElement(cparent,"box");
    var lastContentHeight=ccontent[ccontent.length-1].offsetTop;
    var scrollHeight=document.documentElement.scrollTop||document.body.scrollTop;
    var pageHeight=document.documentElement.clientHeight||document.body.clientHeight;
    console.log(lastContentHeight+":"+scrollHeight+":"+pageHeight);
    if(lastContentHeight<scrollHeight+pageHeight){
    return true;
    }
    }
    function imgLocation(parent,child){
    var cparent=document.getElementById(parent);
    var ccontent=getChildElement(cparent,child);
    var imgwidth=ccontent[0].offsetWidth;
    var cols=Math.floor(document.documentElement.clientWidth/imgwidth);
    cparent.style.cssText="width:"+imgwidth*cols+"px;margin:30px auto";
    var heightArr=[];
    for(var i=0;i<ccontent.length;i++){
    if(i<cols){
    heightArr.push(ccontent[i].offsetHeight);
    }else{
    var minHeight=Math.min.apply(null,heightArr);
    var minIndex=getMinIndex(heightArr,minHeight);
    ccontent[i].style.position="absolute";
    ccontent[i].style.top=minHeight+"px";
    ccontent[i].style.left=ccontent[minIndex].offsetLeft+"px";
    heightArr[minIndex]+=ccontent[i].offsetHeight;
    }
    }
    }
    function getMinIndex(heightArr,minHeight){
    for(var i=0;i<heightArr.length;i++){
    if(heightArr[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;
    }
    好了,關于js實現(xiàn)圖片自動加載的瀑布流效果代碼到此給大家介紹完了,希望對大家有所幫助!