[前端]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;
           }
      }
}
  • 实现效果
    这里写图片描述
目录
相关文章
|
5月前
|
JavaScript 前端开发 API
|
6月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
5766 24
|
7月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
194 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
10月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
162 3
springboot解决js前端跨域问题,javascript跨域问题解决
|
10月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
352 5
|
10月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
253 4
|
10月前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
404 1
|
10月前
|
资源调度 前端开发 JavaScript
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第10天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤,包括安装依赖、创建混淆脚本、修改 `package.json` 脚本命令、构建项目并执行混淆,以及在 HTML 文件中引用混淆后的文件。通过这些步骤,可以有效提高代码的安全性。
1067 2
|
10月前
|
设计模式 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用JavaScript,打造智能交互体验!
【10月更文挑战第30天】前端开发领域充满了无限可能与创意,JavaScript作为核心语言,凭借强大的功能和灵活性,成为打造智能交互体验的重要工具。本文介绍前端大牛如何利用JavaScript实现平滑滚动、复杂动画、实时数据更新和智能表单验证等效果,展示了JavaScript的多样性和强大能力。
251 4
|
存储 前端开发 JavaScript
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
本文介绍了JavaScript变量的声明和使用、标识符的命名规则、如何获取和操作HTML元素,以及JavaScript的鼠标事件处理,通过示例代码展示了这些基础知识点在实际开发中的应用。
130 2
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件