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 相关文章推荐
JavaScript类和继承 this属性使用说明
Sep 03 Javascript
js中将具有数字属性名的对象转换为数组
Mar 06 Javascript
基于jquery的获取浏览器窗口大小的代码
Mar 28 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
Sep 25 Javascript
JS 操作Array数组的方法及属性实例解析
Jan 08 Javascript
javascript 实现map集合
Apr 03 Javascript
Angular4实现动态添加删除表单输入框功能
Aug 11 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
Aug 03 Javascript
JS中数据结构之栈
Jan 01 Javascript
微信小程序实现单选选项卡切换效果
Jun 19 Javascript
vue cli3 配置proxy代理无效的解决
Oct 30 Javascript
简介JavaScript错误处理机制
Aug 04 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 编程的 5个良好习惯
2009/02/20 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
PHP防止跨域提交表单
2013/11/01 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
PHP中“=&gt;
2019/03/01 PHP
javascript奇异的arguments分析
2010/10/20 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
Python中的tuple元组详细介绍
2015/02/02 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
Python sqlite3查询操作过程解析
2020/02/20 Python
python中JWT用户认证的实现
2020/05/18 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
韩国保养品、日本药妆购物网:小三美日
2018/12/30 全球购物
《阳光》教学反思
2014/02/23 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
秋季校运会广播稿100字
2014/09/18 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
初中历史教学反思
2016/02/19 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python