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实现瀑布流的更多相关文章

  1. 用js实现瀑布流的一种简单方法

    现在说瀑布流式布局似乎有点晚了,但是每一项技术都是向着“精”和“简”的方向在不断发展,在发展到极致之前,需要一个相当漫长的过程,因此,从这个角度来说,当瀑布流被应用得越来越多的时候,反而更应该讨论它, ...

  2. 原生JS实现瀑布流

    浏览网页的时候经常会遇到瀑布流布局的网站.也许有些读者不了解瀑布流.瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数 ...

  3. js实现瀑布流的一种简单方法实例分享

    现在说瀑布流式布局似乎有点晚了,但是每一项技术都是向着“精”和“简”的方向在不断发展,在发展到极致之前,需要一个相当漫长的过程,因此,从这个角度来说,当瀑布流被应用得越来越多的时候,反而更应该讨论它, ...

  4. 手把手教你js原生瀑布流效果实现

    手把手教你js原生瀑布流效果实现 什么是瀑布流效果 首先,让我们先看一段动画: 在动画中,我们不难发现,这个动画有以下特点: 1.所有的图片的宽度都是一样的 2.所有的图片的高度是不一样的 3.图片一 ...

  5. [JS练习] 瀑布流照片墙

    记录JS实现瀑布流照片墙效果 首先是前端页面 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  6. bootstrap+masonry.js写瀑布流

    最近在用bootstrap写一个网站,其中有个图文展示的页面要用到瀑布流的效果.因为项目要求,项目要以bootstrap为基准,不准私自添加内联样式.内部样式,所以,自己写瀑布流就不行了,所以,根据要 ...

  7. 多栏布局与JS实现瀑布流

    css3属性之多栏布局与JS实现瀑布流 背景:之前打算自己总结一下flex布局的知识点,发现自己无从下手,原因在何处:我反思了一下,其实原因很简单,使用的次数少,更多的时间使用了百分比,浮动和定位解决 ...

  8. js插件---瀑布流Masonry

    js插件---瀑布流Masonry 一.总结 一句话总结:还是要去看官网,比amazeui上面介绍的详细很多 1.瀑布流的原理是什么? 给外层套好相对定位,里面的每一个弄好绝对定位,然后计算出每一个的 ...

  9. js原生瀑布流

    背景: 1.在移动端开发,jq文件是显得非常庞大的,所以所有效果尽量用HTML5和原生js实现. 2.本次瀑布流是固定列数,采用非浮动的另外一种瀑布流思想实现的. 3.本次数据来源是json接口 4. ...

  10. vue.js实现瀑布流之vue-waterfall-easy

    想必大家应该很多都已经习惯了jquery的DOM操作,jquery的瀑布流实现起来也很容易. 但是,随着时代的发展,随着时代的进步..... 算了算了,扯远了,既然能找到这儿来,肯定是在vue.js上 ...

随机推荐

  1. Java: FreeMarker的配置和使用

    初学什么都不可以忽略的地方就是这个东西的官方网站:http://freemarker.org/.下载或者API都可以参考这里. FreeMarker是什么 非常的简单明了.FreeMarker是一个j ...

  2. [label][JavaScript][The Defined Guide of JavaScript] 如何声明变量

    因为觉得我自己的JavaScript基础很不扎实,或者可以说根本就没有所谓基础,所以就最近一直在看<The Defined Guide of JavaScript> . 在一边看的同时,我 ...

  3. nancyfx 自定义路由module

    在源码的Nancy.Demo.CustomModule项目示例中 查看UglifiedNancyModule.cs文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...

  4. Intellij IDEA如何在一个窗口同时打开多个Maven项目

    建立父目录,比如fatherProject,并将多个项目放入该父目录fatherProject下 File-Open...打开父目录fatherProject 引入pom.xml,打开Maven Pr ...

  5. Git Note - git tag

    git tag is used to create labels, usually for version numbers. Format: git tag <TagName> <r ...

  6. 微信小程序web-view之动态加载html页面

    官方推出的web-view方便了很多开发人员. 我们在做的时候,经常会想到写一个小程序的page然后通过动态加载web-view的形式来完成其他功能页面的开发. 之前研究web-view的时候发现网上 ...

  7. Android ImageView,ImageButton 与 Button

    1. ImageButton 继承自 ImageView.两者具备甚小,因为 ImageView 同样可以点击相应,同样有点击的阴影效果.实际上他们的区别在于默认 style.比如同样放一个背景和一个 ...

  8. 初识Mybatis框架

    mybatis框架  主要是对数据库进行操作的 编写sql语句 使我们对数据库的crud操作更加简洁方便!! 1.使用mybatis框架 进行第一个项目 查询数据库 并返回数据 :(简单) (1)搭建 ...

  9. [bzoj4444] 国旗计划 双指针+倍增

    Description A国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的边 ...

  10. 护网杯圆满结束,还不满足?不如来看看大佬的WP扩展思路~

    护网杯预选赛 WP转载自:https://qingchenldl.github.io/2018/10/13/%E6%8A%A4%E7%BD%91%E6%9D%AFWP-BitPwn/#more WEB ...