[前端]JavaScript瀑布流

简介: 学习了极客学院JavaScript瀑布流实例,实现鼠标下拉图片自动加载效果,和百度图片效果类似http://image.baidu.com/channel/wallpaper。

学习了极客学院JavaScript瀑布流实例,实现鼠标下拉图片自动加载效果,和百度图片效果类似http://image.baidu.com/channel/wallpaper
[TOC]
- 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;
           }
      }
}
  • 实现效果
    这里写图片描述
目录
相关文章
|
3月前
|
前端开发 JavaScript 安全
从前端性能优化角度谈JavaScript代码压缩与混淆
本文从前端性能优化的角度出发,探讨了JavaScript代码压缩与混淆的重要性及实现方式,通过分析不同压缩混淆工具的特点和效果,为开发者提供了实用的指导和建议。
|
10天前
|
JavaScript 前端开发 C++
【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
【5月更文挑战第2天】【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
|
12天前
|
缓存 前端开发 JavaScript
【JavaScript 技术专栏】JavaScript 前端路由实现原理
【4月更文挑战第30天】本文探讨了JavaScript前端路由在SPA中的重要性,阐述了其基本原理和实现方式,包括Hash路由和History路由。前端路由通过监听URL变化、匹配规则来动态切换内容,提升用户体验和交互性。同时,文章也提到了面临的SEO和页面缓存挑战,并通过电商应用案例分析实际应用。理解并掌握前端路由能助开发者打造更流畅的单页应用。
|
13天前
|
前端开发 JavaScript 数据安全/隐私保护
前端javascript的DOM对象操作技巧,全场景解析(二)
前端javascript的DOM对象操作技巧,全场景解析(二)
|
13天前
|
移动开发 缓存 JavaScript
前端javascript的DOM对象操作技巧,全场景解析(一)
前端javascript的DOM对象操作技巧,全场景解析(一)
|
13天前
|
缓存 编解码 自然语言处理
前端javascript的BOM对象知识精讲
前端javascript的BOM对象知识精讲
|
17天前
|
前端开发 JavaScript
前端 富文本编辑器原理——从javascript、html、css开始入门(二)
前端 富文本编辑器原理——从javascript、html、css开始入门
26 0
前端 富文本编辑器原理——从javascript、html、css开始入门(二)
|
17天前
|
前端开发 JavaScript 索引
前端 富文本编辑器原理——从javascript、html、css开始入门(一)
前端 富文本编辑器原理——从javascript、html、css开始入门
36 0
|
20天前
|
JSON 前端开发 JavaScript
【2024-04-22 源码】最新PDF批注注释插件库,pdf.js插件库,纯前端离线JavaScript库(PDF高亮、下划线、橡皮擦、文本框、画笔、历史记录)
一款基于 pdf.js 开发的PDF批注插件库,支持纯离线内网部署,功能完善、强大且在不断升级,极易上手,欢迎关注!
35 4
【2024-04-22 源码】最新PDF批注注释插件库,pdf.js插件库,纯前端离线JavaScript库(PDF高亮、下划线、橡皮擦、文本框、画笔、历史记录)
|
21天前
|
前端开发 JavaScript
前端基础知识(一){HTML.CSS.JavaScript}
前端基础知识(一){HTML.CSS.JavaScript}