js的瀑布流效果
2016-03-14 15:09
603 查看
思路实现:
1,得到一排能够放多少张图片
2,将第二排的图片中的第一张放在上面一排最低的那张图片下
3,当最后一张图片的offsetTop<scrollTop+clientHeight 的时候加载图片
1,html的代码:
2,css的代码:
3,js的代码:
1,得到一排能够放多少张图片
2,将第二排的图片中的第一张放在上面一排最低的那张图片下
3,当最后一张图片的offsetTop<scrollTop+clientHeight 的时候加载图片
1,html的代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>瀑布流</title> <link rel="stylesheet" type="text/css" href="css/style.css"> <script type="text/javascript" src="js/app1.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/11.jpg"alt=""></div> </div> <div class="box"> <div class="box_img"><img src="images/12.jpg"alt=""></div> </div> <div class="box"> <div class="box_img"><img src="images/13.jpg"alt=""></div> </div> <div class="box"> <div class="box_img"><img src="images/12.jpg"alt=""></div> </div> <div class="box"> <div class="box_img"><img src="images/13.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/11.jpg"alt=""></div> </div> <div class="box"> <div class="box_img"><img src="images/12.jpg"alt=""></div> </div> <div class="box"> <div class="box_img"><img src="images/13.jpg"alt=""></div> </div> <div class="box"> <div class="box_img"><img src="images/12.jpg"alt=""></div> </div> <div class="box"> <div class="box_img"><img src="images/13.jpg"alt=""></div> </div> </div> </body> </html>
2,css的代码:
*{margin: 0;padding: 0} #container{position: relative;} .box{padding: 5px; float: left;} .box_img{padding: 5px; border: 1px solid #ccc; box-shadow:0 0 5px #ccc; border-radius: 5px;} .box_img img{width: 150px; height: auto;}
3,js的代码:
window.onload=function () { locationImg("container","box"); // json字符串模拟数据 var imgData={"data":[{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpg"}]} //拖拽滚动条触发事件 window.onscroll=function () { if(checkFlag("container","box")){ 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); } } locationImg("container","box"); } } function checkFlag (parent,content) { var cparent=document.getElementById(parent); var content=getChildsElement(cparent,content); //获取最后一个元素的高度 var lastContentHeight=content[content.length-1].offsetTop; //获取滚动条的告诉 var scrollTop=document.documentElement.scrollTop|| document.body.scrollTop; var pageHeight=document.documentElement.clientHeight|| document.body.clientHeight; if(lastContentHeight<(pageHeight+scrollTop)){return true;} } function locationImg (parent,content) { var cparent=document.getElementById(parent); var ccontent=getChildsElement(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 boxHeigthArr=[]; for(var i=0;i<ccontent.length; i++){ if(i<cols){ boxHeigthArr[i]= ccontent[i].offsetHeight; } else{ // 得到数组中最小的 var minHeight=Math.min.apply(null,boxHeigthArr); var minIndex=getMinHeightLocation(boxHeigthArr,minHeight); ccontent[i].style.position="absolute"; ccontent[i].style.top=minHeight+"px"; ccontent[i].style.left=ccontent[minIndex].offsetLeft+"px"; boxHeigthArr[minIndex]=boxHeigthArr[minIndex]+ccontent[i].offsetHeight; } } } // 得到最小高度图片的位置 function getMinHeightLocation (boxHeigthArr,minHeight) { for(i in boxHeigthArr){ if(boxHeigthArr[i]==minHeight){ return i; } } } //得到有多少张图片 function getChildsElement (parent,content) { var contentArr=[]; var allcontents=document.getElementsByTagName("*"); for(var i=0;i<allcontents.length;i++){ if(allcontents[i].className==content){ contentArr.push(allcontents[i]); } } return contentArr; }
相关文章推荐
- 谈谈JS的核心技术:原型对象和原型链
- js 对Array的补充
- JSP EL
- js判断当前环境是否为苹果手机
- js中instanceof与typeof的区别以及instanceof的门道
- 【SSH (七) 】使用ajax + json 交互
- JavaScript对象数组表格处理加案例
- JSP标准标签
- JavaScript学习笔记——基本包装类型(上)Boolean、Number
- javascript的date()和getTime()区别
- 《JavaScript高级程序设计》第7章 函数表达式
- JS正则表达式匹配<div><style>标签
- js函数对象
- 在JavaScript中创建命名空间的几种写法
- (三)ExtJs小例子之:带有输入框的提示框(prompt)
- 【JavaScript】(8)——实例:图片切换效果
- JavaScript设计模式 Item8 --外观模式Facade
- javascript window.name是什么?
- JavaScript实现360度全景图片展示效果
- js日期格式化