码迷,mamicode.com
首页 > 编程语言 > 详细

javascript瀑布流效果

时间:2016-07-05 22:45:36      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:javascript

<!doctype html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <title>瀑布流演示</title>
  <link rel="stylesheet" type="text/css" href="pubu_css.css"/>
  <script language="javascript" type="text/javascript" src="pubu_js.js"></script>
 </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.jpeg"></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 class="box">
         <div class="box_img"><img src="img/6.jpeg"></div>
      </div>
      
      <div class="box">
         <div class="box_img"><img src="img/7.jpeg"></div>
      </div>
      
      <div class="box">
         <div class="box_img"><img src="img/8.jpeg"></div>
      </div>
      
      <div class="box">
         <div class="box_img"><img src="img/9.jpg"></div>
      </div>

    </div>
</body>
</html>


window.onload=function(){
    imgLocation("container","box");

    //使用json字符串模拟数据
    var imgData={"data":[{"src":"2.jpeg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpeg"}]};

    //监听滚动条
    window.onscroll=function(){
        if(checkFlag()){
           //动态加载数据
           var cparent=document.getElementById("container");
           for(var i=0;i<imgData.data.length;i++){
               //创建div
               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;
    var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;//||用于处理浏览器兼容问题
    var pageHeight=document.documentElement.clientHeight||document.body.clientHeight;
    if(lastContentHeight<scrollTop+pageHeight){
        return true;
    }
}

//获得屏幕有多少个图片,即获得多少个div
function imgLocation(parent,content){
    var cparent=document.getElementById(parent);
    var ccontent=getChildElement(cparent,content);
    var imgWidth=ccontent[0].offsetWidth;//得到图片的宽度
    var cols=Math.floor(document.documentElement.clientWidth/imgWidth);//得到一行屏幕可显示的图片的个数,并转换成整数
    cparent.style.cssText="width:"+imgWidth*cols+"px;margin:0 auto;";//设置图片不随屏幕宽度而变化
    
    //得到一排中所有盒子中最矮的一个,使得第二排的盒子在第一排最矮的盒子下面
    var BoxHeightArr=[];
    for(var i=0;i<ccontent.length;i++){
        if(i<cols){
            BoxHeightArr[i]=ccontent[i].offsetHeight;
        //console.log(BoxHeightArr[i]);打印所有盒子的高度
        }else{
            var minheight=Math.min.apply(null,BoxHeightArr);//得到最小的
            //设置其css属性
            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;
}


javascript瀑布流效果

标签:javascript

原文地址:http://zygd99.blog.51cto.com/11063412/1796058

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!