JS实现瀑布流

HTML:先让图片充满一页
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>瀑布流</title>
<link rel="stylesheet" href="css/style.css" type="text/css">
<script src="js/app.js"></script>
</head>
<body>
<div id="container"><div class="box">
<<div class="box">
<div class="box_img">
<img src="img/5.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/5.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/5.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/5.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/5.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/5.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/5.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/5.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/5.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/5.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/5.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/5.jpg">
</div>
</div><div class="box">
<div class="box_img">
<img src="img/5.jpg">
</div></div></div> </body>
</html>
app.js:
window.onload=function() {
imgLocation("container");
var imgData={"data":[{"src":"2.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpg"},{"src":"7.jpg"}]};
window.onscroll =function(){
if(checkFlag()){
var cparent = document.getElementById("container");
for(var i=0;i<imgData.data.length;i++){
var cnode=document.createElement("div");
cnode.className="box";
cparent.appendChild(cnode);
var boxImg=document.createElement("div");
boxImg.className="box_img";
cnode.appendChild(boxImg);
var img=document.createElement("img");
img.src="img/"+imgData.data[i].src;
boxImg.appendChild(img);
}
imgLocation("container");
}
}
}
function checkFlag(){
var cparent = document.getElementById("container");
var arr=cparent.childNodes;
var lastContentHeight=arr[arr.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){
var cparent = document.getElementById(parent);
var arr=Array.prototype.slice.call(cparent.childNodes,0);
var imgWidth=arr[0].offsetWidth;
var num=parseInt(document.documentElement.clientWidth/imgWidth);
cparent.style.cssText="width:"+imgWidth*num+"px;"+"margin:0px auto";
var boxHeightArr=[];
for(var i=0;i<arr.length;i++){
if(i<num){
boxHeightArr[i]=arr[i].offsetHeight;
}else{
var minHeight=Math.min.apply(null,boxHeightArr);
var index=getMinHeightindex(boxHeightArr,minHeight);
arr[i].style.position = "absolute";
arr[i].style.top = minHeight+"px";
arr[i].style.left = arr[index].offsetLeft+"px";
boxHeightArr[index] = boxHeightArr[index]+arr[i].offsetHeight;
}
}
}
function getMinHeightindex(boxHeightArr,minHeight){
for(var i in boxHeightArr){
if(boxHeightArr[i]==minHeight){
return i;
}
}
}
css:
*{
padding:0px;
margin:0px;
}
#container{
position:relative;
}
.box{
padding:5px;
float:left;
}
.box_img{
padding:5px;
border:1px solid #cccccc;
border-radius: 5px;
box-shadow: 0 0 5px #cccccc;
}
.box_img img{
width:150px;
height: auto;
}
JS实现瀑布流的更多相关文章
- 用js实现瀑布流的一种简单方法
现在说瀑布流式布局似乎有点晚了,但是每一项技术都是向着“精”和“简”的方向在不断发展,在发展到极致之前,需要一个相当漫长的过程,因此,从这个角度来说,当瀑布流被应用得越来越多的时候,反而更应该讨论它, ...
- 原生JS实现瀑布流
浏览网页的时候经常会遇到瀑布流布局的网站.也许有些读者不了解瀑布流.瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数 ...
- js实现瀑布流的一种简单方法实例分享
现在说瀑布流式布局似乎有点晚了,但是每一项技术都是向着“精”和“简”的方向在不断发展,在发展到极致之前,需要一个相当漫长的过程,因此,从这个角度来说,当瀑布流被应用得越来越多的时候,反而更应该讨论它, ...
- 手把手教你js原生瀑布流效果实现
手把手教你js原生瀑布流效果实现 什么是瀑布流效果 首先,让我们先看一段动画: 在动画中,我们不难发现,这个动画有以下特点: 1.所有的图片的宽度都是一样的 2.所有的图片的高度是不一样的 3.图片一 ...
- [JS练习] 瀑布流照片墙
记录JS实现瀑布流照片墙效果 首先是前端页面 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- bootstrap+masonry.js写瀑布流
最近在用bootstrap写一个网站,其中有个图文展示的页面要用到瀑布流的效果.因为项目要求,项目要以bootstrap为基准,不准私自添加内联样式.内部样式,所以,自己写瀑布流就不行了,所以,根据要 ...
- 多栏布局与JS实现瀑布流
css3属性之多栏布局与JS实现瀑布流 背景:之前打算自己总结一下flex布局的知识点,发现自己无从下手,原因在何处:我反思了一下,其实原因很简单,使用的次数少,更多的时间使用了百分比,浮动和定位解决 ...
- js插件---瀑布流Masonry
js插件---瀑布流Masonry 一.总结 一句话总结:还是要去看官网,比amazeui上面介绍的详细很多 1.瀑布流的原理是什么? 给外层套好相对定位,里面的每一个弄好绝对定位,然后计算出每一个的 ...
- js原生瀑布流
背景: 1.在移动端开发,jq文件是显得非常庞大的,所以所有效果尽量用HTML5和原生js实现. 2.本次瀑布流是固定列数,采用非浮动的另外一种瀑布流思想实现的. 3.本次数据来源是json接口 4. ...
- vue.js实现瀑布流之vue-waterfall-easy
想必大家应该很多都已经习惯了jquery的DOM操作,jquery的瀑布流实现起来也很容易. 但是,随着时代的发展,随着时代的进步..... 算了算了,扯远了,既然能找到这儿来,肯定是在vue.js上 ...
随机推荐
- 中心极限定理&&正态分布 随想
0-前言 笔者本来周末约好朋友出去骑行,不料天公不作美!哎,闲来无事来到了实验室,本来打算看看<天天向上>,而这一期又实在不好看(偶像剧).只好来做做一些小实验,脑海里突然想到“正态分布“ ...
- JQuery --- 第五期 (JQuery节点操作)
学习笔记 1.JQuery添加节点相关方法 <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- [zepto]源码学习
$() : zepto选择器,与jquery选择器类似,但是不支持jquery的拓展css支持(:first,:eq,:last...) $("div")选择页面内的全部div元素 ...
- Android 多图,大图内存优化
策略: 1. 图片压缩 如果所需尺寸大于图片原始尺寸,可以压缩图片节省内存. 2. 图片缓存 每个图片加载时都会生成一个 Bitmap.把这些 Bitmap 缓存起来以重用相同的图片,避免重复创建. ...
- k8s 入门系列之集群安装篇
关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...
- Verify the Developer App certificate for your account is trusted on your device.
1.报错内容 Could not launch "CH5203" Verify the Developer App certificate for your account is ...
- springboot整合websocket后运行测试类报错:javax.websocket.server.ServerContainer not available
springboot项目添加websocket依赖后运行测试类报如下错误: org.springframework.beans.factory.BeanCreationException: Error ...
- MVC框架入门准备(一)
最近开发一套自己的框架,开发了一个多月,已传到git,学到了挺多,系列文章我会慢慢写挺多 这里先讲大致框架多用到的某些函数,我这里先列举一部分,网上对函数的定义,参数说明等,我就不照搬了,记录自己的理 ...
- acedSSGet 翻译
ObjectARX 参考指南 > 全局函数 > AcEd 全局函数 > acedSSGet 函数 acedSSGet 折叠全部 C++ int acedSSGet( const AC ...
- jmeter+ant+jenkins+mac 报告优化(三) 使用命令行执行jmeter方式生成多维度的图形化HTML报告
1.在构建中填写如下命令: 2.start.sh文件的内容 cd /Applications/apache-jmeter-3.0/bin/ CURTIME=`date +%Y%m%d%H%M` ./j ...