javascript实现瀑布流动态加载图片原理


Posted in Javascript onAugust 12, 2016

本文实例为大家分享了js瀑布流加载效果,动态加载图片,供大家参考,具体内容如下

鼠标滚动事件,当鼠标滚动到下边,动态加载图片。

1. HTML代码    

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>js实现瀑布流效果-动态加载图片</title>
  <link rel="stylesheet" href="css/waterfallflow.css" type="text/css" />
  <script src="js/waterfallflow.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.jpg" />
    </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.jpg" />
    </div>
   </div>
   <div class="box">
    <div class="box_img">
     <img src="img/7.jpg" />
    </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/1.jpg" />
    </div>
   </div>
   <div class="box">
    <div class="box_img">
     <img src="img/2.jpg" />
    </div>
   </div>
   <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.jpg" />
    </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.jpg" />
    </div>
   </div>
    
  </div>
 </body>
</html>

2. CSS代码    

*{
 margin: 0px;
 padding: 0px;
}
#container{
 position: relative;
}
.box{
 padding: 5px;
 float: left;
 margin: 0px auto;
}
.box_img{
 padding: 5px;
 border: 1px solid #DCDCDC;
 box-shadow: 0 0 5px #ccc;
 border-radius: 5px;
}
.box_img img{
 width: 230px;
}

3. JavaScript代码    

window.onload=function(){
  
 imgLocation("container","box");
 var imgData={"data":[{"src":"1.jpg"},{"src":"2.jpg"},{"src":"3.jpg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpg"},{"src":"2.jpg"},{"src":"3.jpg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"}]}
 window.onscroll=function(){
//  console.log(document.documentElement.scrollTop);
  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="img/"+imgData.data[i].src;
    boximg.appendChild(img);
     
    //另外一种方法在div后边追加内容,不覆盖原有内容
//    var content="<div class='box'><div class='box_img'><img src='img/"+imgData.data[i].src+"'/></div></div>";
//    cparent.innerHTML+=content;
   }
   imgLocation("container","box");
  }
 }
}
 
function checkFlag(){
 var cparent=document.getElementById("container");
 var ccontent=getChildElement(cparent,"box");//图片的所有box数
 var lastContentHeight=ccontent[ccontent.length-1].offsetTop;//最后一张图片距离顶部高度
 var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;//滚动条距离顶部高度
 var pageHeight=document.documentElement.clientHeight||document.body.clientHeight;//屏幕高度
// console.log(lastContentHeight+","+scrollTop+","+pageHeight);
 if(lastContentHeight<scrollTop+pageHeight){
  return true;
 }
}
 
function imgLocation(parent,content){
 var cparent=document.getElementById(parent);
 var ccontent=getChildElement(cparent,content);//图片的所有box数
 var imgWidth=ccontent[0].offsetWidth;//图片宽度
 var num=Math.floor(document.documentElement.clientWidth/imgWidth);//一行放图片个数
 cparent.style.cssText="width:"+imgWidth*num+"px;margin:0px auto";//container的宽度
 var boxHeightArr=[];//每一列box高度
 for(var i=0;i<ccontent.length;i++){
  if(i<num){
   boxHeightArr[i]=ccontent[i].offsetHeight;
  }else{
   var minHeight=Math.min.apply(null,boxHeightArr);//最小高度
   var minIndex = getMinheightLocation(boxHeightArr,minHeight);//得到最小高度下标
//   console.log(minHeight+","+minIndex);
   ccontent[i].style.position="absolute";
   ccontent[i].style.top=minHeight+"px";//距离顶部高度
   ccontent[i].style.left=ccontent[minIndex].offsetLeft+"px";//距离左边长度
   boxHeightArr[minIndex]+=ccontent[i].offsetHeight;
//   console.log(ccontent[i].offsetHeight+","+ccontent[i].height);//ccontent[i].height=undefined
    
  }
 }
}
 
function getMinheightLocation(boxHeightArr,minHeight){
 for(var i in boxHeightArr){
  if(boxHeightArr[i]==minHeight){
   return i
  }
 }
}
 
function getChildElement(parent,content){
 //将parent下有content的全部取出
 var contentArr=[];
 var allContent=parent.getElementsByTagName("*");
 for(i=0;i<allContent.length;i++){
  if(allContent[i].className=="box"){
   contentArr.push(allContent[i]);
  }
 }
 return contentArr;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
iis6+javascript Add an Extension File
Jun 13 Javascript
JavaScript prototype对象的属性说明
Mar 13 Javascript
jQeury淡入淡出需要注意的问题
Sep 08 Javascript
js实现翻页后保持checkbox选中状态的实现方法
Nov 03 Javascript
js实现的折叠导航示例
Nov 29 Javascript
javaScript对文字按照拼音排序实现代码
Dec 27 Javascript
javascript实现单击和双击并存的方法
Dec 13 Javascript
jquery对复选框(checkbox)的操作汇总
Jan 13 Javascript
Vue编写多地区选择组件
Aug 21 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
Sep 16 Javascript
JS canvas绘制五子棋的棋盘
May 28 Javascript
微信小程序自定义导航栏实例代码
Apr 05 Javascript
jquery实现垂直和水平菜单导航栏
Aug 27 #Javascript
JS实现图片剪裁并预览效果
Aug 12 #Javascript
JS数组去掉重复数据只保留一条的实现代码
Aug 11 #Javascript
分享JS数组求和与求最大值的方法
Aug 11 #Javascript
利用JavaScript阻止表单提交的两种方法
Aug 11 #Javascript
防止Node.js中错误导致进程阻塞的办法
Aug 11 #Javascript
JavaScript中 ES6 generator数据类型详解
Aug 11 #Javascript
You might like
php 远程图片保存到本地的函数类
2008/12/08 PHP
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
PHP中调用ASP.NET的WebService的代码
2011/04/22 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
python__name__原理及用法详解
2019/11/02 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
DTD的含义以及作用
2014/01/26 面试题
地质灾害防治方案
2014/05/14 职场文书
政风行风整改报告
2014/11/06 职场文书
功夫熊猫观后感
2015/06/10 职场文书
会计岗位工作总结
2015/08/12 职场文书
解析目标检测之IoU
2021/06/26 Python