首页 web前端 js教程 基于JavaScript实现瀑布流布局_javascript技巧

基于JavaScript实现瀑布流布局_javascript技巧

May 16, 2016 pm 03:20 PM
javascript 瀑布流

本文实例讲解了原生JavaScript实现瀑布流布局详细代码,分享给大家供大家参考,具体内容如下

效果图:

具体代码:

HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <link rel="stylesheet" type="text/css" href="css/style.css">
  <script type="text/javascript" src="js/app.js"></script>
</head>
<body>
  <div id="container">
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/1.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/2.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/3.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/4.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/5.jpg"  class="lazy" alt=""></div>
    </div>
  <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/6.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/7.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/8.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/9.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/10.jpg"  class="lazy" alt=""></div>
    </div>

    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/1.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/2.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/3.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/4.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/5.jpg"  class="lazy" alt=""></div>
    </div>
  <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/6.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/7.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/8.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/9.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/10.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/1.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/2.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/3.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/4.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/5.jpg"  class="lazy" alt=""></div>
    </div>
  <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/6.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/7.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/8.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/9.jpg"  class="lazy" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="/static/imghw/default1.png"  data-src="images/10.jpg"  class="lazy" alt=""></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 #cccccc;
   box-shadow: 0 0 5px #ccc;
   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"},
       {"src":"4.jpg"},
       {"src":"5.jpg"},
       {"src":"6.jpg"},
       {"src":"7.jpg"},
       {"src":"8.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="images/"+imgData.data[i].src;
         boximg.appendChild(img);
      } 
       imgLocation("container","box");
    }
   }
}

function checkFlag(){
   var cparent=document.getElementById("container");
   var ccontent=getChildnode(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;
   }
}
function imgLocation(parent,content){
     var cparent=document.getElementById(parent);
     var ccontent=getChildnode(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 imgHeightArr=[];
     for (var i = 0; i < ccontent.length; i++) {
        if (i<cols) {
            imgHeightArr[i]=ccontent[i].offsetHeight;          
        }else{
            var minHeight=Math.min.apply(null,imgHeightArr);
            var minHeightIndex=getMinHeightLoc(imgHeightArr,minHeight);
            console.log("minHeightIndex"+minHeightIndex);
      ccontent[i].style.position="absolute";
      ccontent[i].style.top=minHeight+"px";
      ccontent[i].style.left=ccontent[minHeightIndex].offsetLeft+"px";
      imgHeightArr[minHeightIndex]=imgHeightArr[minHeightIndex]+ccontent[i].offsetHeight;
        console.log(imgHeightArr[i]);
        console.log("高度最低:"+minHeight);
        }

    }

}

function getChildnode(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;
}

function getMinHeightLoc(imgHeightArr,minHeight){
   for(var i in imgHeightArr){
      if (imgHeightArr[i]==minHeight) {
       return i;
      }
   }
}
登录后复制

希望本文所述对大家学习javascript程序设计有所帮助。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用WebSocket和JavaScript实现在线语音识别系统 如何使用WebSocket和JavaScript实现在线语音识别系统 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript实现在线语音识别系统

WebSocket与JavaScript:实现实时监控系统的关键技术 WebSocket与JavaScript:实现实时监控系统的关键技术 Dec 17, 2023 pm 05:30 PM

WebSocket与JavaScript:实现实时监控系统的关键技术

如何使用WebSocket和JavaScript实现在线预约系统 如何使用WebSocket和JavaScript实现在线预约系统 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript实现在线预约系统

如何利用JavaScript和WebSocket实现实时在线点餐系统 如何利用JavaScript和WebSocket实现实时在线点餐系统 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket实现实时在线点餐系统

简易JavaScript教程:获取HTTP状态码的方法 简易JavaScript教程:获取HTTP状态码的方法 Jan 05, 2024 pm 06:08 PM

简易JavaScript教程:获取HTTP状态码的方法

JavaScript和WebSocket:打造高效的实时天气预报系统 JavaScript和WebSocket:打造高效的实时天气预报系统 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的实时天气预报系统

javascript中如何使用insertBefore javascript中如何使用insertBefore Nov 24, 2023 am 11:56 AM

javascript中如何使用insertBefore

如何在JavaScript中获取HTTP状态码的简单方法 如何在JavaScript中获取HTTP状态码的简单方法 Jan 05, 2024 pm 01:37 PM

如何在JavaScript中获取HTTP状态码的简单方法

See all articles