基于JavaScript实现瀑布流布局_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="images/1.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/2.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/3.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/4.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/5.jpg" alt=""></div>
    </div>
  <div class="box">
       <div class="box_img"> <img src="images/6.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/7.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/8.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/9.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/10.jpg" alt=""></div>
    </div>

    <div class="box">
       <div class="box_img"> <img src="images/1.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/2.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/3.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/4.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/5.jpg" alt=""></div>
    </div>
  <div class="box">
       <div class="box_img"> <img src="images/6.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/7.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/8.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/9.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/10.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/1.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/2.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/3.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/4.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/5.jpg" alt=""></div>
    </div>
  <div class="box">
       <div class="box_img"> <img src="images/6.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/7.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/8.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/9.jpg" alt=""></div>
    </div>
    <div class="box">
       <div class="box_img"> <img src="images/10.jpg" 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程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索javascript
瀑布流
瀑布流布局实现、纯css实现瀑布流布局、css实现瀑布流布局、浮动实现瀑布流布局、瀑布流布局实现原理,以便于您获取更多的相关知识。

时间: 2024-09-22 23:49:54

基于JavaScript实现瀑布流布局_javascript技巧的相关文章

原生JavaScript实现瀑布流布局_javascript技巧

本文实例讲解了原生JavaScript实现瀑布流布局详细代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: window.onload=function(){ waterfall('main','pin'); var dataInt={'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'}]}; window.onscroll=function(){ if(checkscrollside()){

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

本文实例讲解了JavaScript实现瀑布流布局详细代码,分享给大家供大家参考,具体内容如下 1.建立Html模版 想法是先用一个div container承载所有内容,然后div box用来放置图片,最后div box_border来当图片框,代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>瀑布流</title> </head

深入学习js瀑布流布局_javascript技巧

本文实例为大家分享了js瀑布流布局学习资料,供大家参考,具体内容如下 特点:等宽不等高.实现方式:Javascript/Jquery/CSS3多栏布局. 样例网站:花瓣网-->分类 一.JS实现瀑布流 index.html:页面结构     <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>瀑布流布局</t

原生JS实现响应式瀑布流布局_javascript技巧

原生JS实现的瀑布流布局,代码及demo代码地址:https://github.com/leozdgao/responsive_waterfall Demo:http://leozdgao.github.io/demo/responsive_waterfall/ 演示图: 核心代码: responsive_waterfall.js (function() { var Waterfall = function(opts) { var minBoxWidth; Object.defineProper

11款基于Javascript的文件管理器_javascript技巧

1. eXtplorer eXtplorer是一个基于PHP与ExtJS开发的文件管理器.你可以用它浏览服务器上的文件与目录.编辑,复制,移动,删除文件.搜索,上传和删除文件.创建新的文件和目录.改变文件的权限属性. 2. Control.Filebrowser (演示地址) 采用Mootools框架开发的文件浏览器控件. 3. FileManager (演示地址) FileManager是一个基于Mootools PHP实现的文件管理器.提供浏览,删除,重命名,移动/复制(支持鼠标拖放操作)和

基于javascript编写简单日历_javascript技巧

一.表格行数问题      既然要显示日期表格的话,首先得知道这个表格有多少行多少列,列数是已经确定的,从星期天(日历上第1列是星期天)到星期六一共7列.要解决行数问题之前,还得先知道这个月的第1天是星期几,因为每个月的1号并不都是从日历上的星期天开始排的,可能1号是星期五,星期六也说不定,所以1号的左边部分,就得用空表格代替了.那么用多少个空表格代替呢,这里就得用到getDay()方法了,该方法返回数组[0-6]中的一个数字,0代表星期天,1代表星期一,2代表星期二,以此类推.所以如果一个月的

基于javascript如何传递特殊字符_javascript技巧

在没步入正轨之前,先给大家介绍JavaScript 特殊字符 你可以在 JavaScript 中使用反斜杠来向文本字符串添加特殊字符. 插入特殊字符 反斜杠用来在文本字符串中插入省略号.换行符.引号和其他特殊字符. 请看下面的 JavaScript 代码: var txt="We are the so-called "Vikings" from the north." document.write(txt) 在 JavaScript 中,字符串使用单引号或者双引号来

基于Javascript实现弹出页面效果_javascript技巧

弹出层效果是一个很实用的功能,很多网站都采用了这种方式实现登录和注册,比如百度: 弹出层的特点:点击登录或注册的时候在页面的中间部分弹出一个登录或注册区域并且页面有一个遮罩层,而且登录框在遮罩层之上,也就是登陆框的z-index值要大于遮罩层的z-index值.当点击关闭或者遮罩层时关闭登录或者注册框(有的网页没有实现点击遮罩层关闭登录或注册区域的功能.). 最近也做了一个类似的弹出层的效果,先展示一下最终效果: 简单的说一下实现的过程. 首先是遮罩层.遮罩层是在页面动态加载的过程中创建的,因为

基于Javascript实现倒计时功能_javascript技巧

本文实例实现一个倒计时功能. 倒计时功能, 用在项目的发布时间, 或者某个活动做倒计时等等的突出时间功能的方面. 界面代码结构,先要完成好. 这个界面我就不做那么美观了,凑合就行(O(∩_∩)O哈哈~). 代码名称 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>倒计时实现</title> <sty