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 相关文章推荐
jQuery 常见开发使用技巧总结
Dec 26 Javascript
js实现兼容IE6与IE7的DIV高度
May 13 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
Jun 03 Javascript
微信小程序 前端源码逻辑和工作流详解
Oct 08 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
Jan 16 Javascript
jQuery实现字符串全部替换的方法【推荐】
Mar 09 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
Apr 07 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
Mar 02 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
Apr 13 Javascript
在layui中layer弹出层点击事件无效的解决方法
Sep 05 Javascript
JQuery中DOM节点的操作与访问方法实例分析
Dec 23 jQuery
JavaScript WeakMap使用详解
Feb 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 addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
php把数组值转换成键的方法
2015/07/13 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
python类参数self使用示例
2014/02/17 Python
Python实现文件按照日期命名的方法
2015/07/09 Python
Python heapq使用详解及实例代码
2017/01/25 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
Eclipse面试题
2014/03/22 面试题
介绍一下JNDI的基本概念
2013/07/26 面试题
财务部总监岗位职责
2014/03/12 职场文书
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python