## JS实现瀑布流
> 效果如图
![](https://box.kancloud.cn/411d36ad56d1d645e5becf646f5579f6_1778x745.gif)
> html代码
```
<div id="container" class="container row">
<div class="content"><img src="images/01.jpg" alt=""></div>
<div class="content"><img src="images/02.jpg" alt=""></div>
<div class="content"><img src="images/03.jpg" alt=""></div>
<div class="content"><img src="images/04.jpg" alt=""></div>
<div class="content"><img src="images/05.jpg" alt=""></div>
<div class="content"><img src="images/06.jpg" alt=""></div>
<div class="content"><img src="images/07.jpg" alt=""></div>
<div class="content"><img src="images/08.jpg" alt=""></div>
<div class="content"><img src="images/09.jpg" alt=""></div>
<div class="content"><img src="images/10.jpg" alt=""></div>
<div class="content"><img src="images/11.jpg" alt=""></div>
<div class="content"><img src="images/12.jpg" alt=""></div>
</div>
```
> css代码
```
* {
margin: 0;
padding: 0;
}
.container {
margin-left: auto;
margin-right: auto;
}
.row::after {
display: block;
content: "";
clear: both;
}
.content {
float: left;
box-shadow: 0 0 3px 1px rgba(0, 0, 0, .1);
}
img {
width: 300px;
padding: 10px;
vertical-align: bottom;
}
```
> js代码
```
window.onload = function(){
var url = {
dataUrl: [{
src: "01.jpg"
}, {
src: "02.jpg"
}, {
src: "03.jpg"
}, {
src: "04.jpg"
}, {
src: "05.jpg"
}, {
src: "06.jpg"
}, {
src: "07.jpg"
}, {
src: "08.jpg"
}, {
src: "09.jpg"
}, {
src: "10.jpg"
}, {
src: "11.jpg"
}, {
src: "12.jpg"
}]
}
var data = url.dataUrl;
var container = document.getElementById("container");
var contents = document.getElementsByClassName("content");
place();
function place(){
var ww = window.innerWidth;
var cw = contents[0].offsetWidth;
var num = Math.floor(ww/cw);
// var content_arr = Array.prototype.slice.call(contents);
var arr_height = [];
container.style.width = num*cw + "px";
// content_arr.forEach(function(element, index){
// if(index<num){
// arr_height.push(element.offsetHeight);
// }else{
// var minHeight = Math.min(...arr_height); //获取最小高度
// var minIndex = arr_height.indexOf(minHeight); //获取最小高度的index值
// var offsetLeft = content_arr[minIndex].offsetLeft; //通过minIndex值获取最小块的左边偏移量
// content_arr[index].style.position = "absolute"; //给当前元素添加样式
// element.style.top = minHeight + "px"; //把最小块的height赋给当前元素top
// element.style.left = offsetLeft + "px"; //把最小块left赋给当前元素left
// // console.log(minHeight);
// arr_height[minIndex] += element.offsetHeight; //最小块的height = 原height + 当前元素的height
// // console.log(index);
// }
// })
for(let i=0; i<contents.length; i++){
if(i<num){
arr_height.push(contents[i].offsetHeight);
}else {
var minHeight = Math.min(...arr_height);
var minIndex = arr_height.indexOf(minHeight);
var offsetLeft = contents[minIndex].offsetLeft;
contents[i].style.position = "absolute";
contents[i].style.left = offsetLeft + "px";
contents[i].style.top = minHeight + "px";
arr_height[minIndex] += contents[i].offsetHeight;
}
}
var offsetTop = contents[contents.length-1].offsetTop +
contents[contents.length - 1].offsetHeight / 2;
window.onscroll = function() {
if(sCondition()) {
for(let i=0; i<data.length; i++) {
let img = document.createElement("img");
img.src = "images/" + data[i].src;
let div = document.createElement("div");
div.className = "content";
div.append(img);
container.append(div);
place();
}
console.log("滚轮高度:"+document.documentElement.scrollTop);
console.log("可视高度:"+document.documentElement.clientHeight);
console.log("页面高度:"+screen.availHeight);
console.log("最后一个元素自身一半距离顶部高度:"+offsetTop);
console.log("加载");
}
}
function sCondition() {
var sh = document.documentElement.scrollTop;
var vh = document.documentElement.clientHeight;
// var offsetTop = contents[contents.length-1].offsetTop +
// contents[contents.length - 1].offsetHeight / 2;
return sh+vh > offsetTop? true:false;
}
}
window.onresize = function(){
console.log("resize");
window.location.reload();
}
}
```
----
整个项目已上传至[github](https://github.com/MrXuxu/H5_demo/tree/master/JS%E7%80%91%E5%B8%83%E6%B5%81)
- 空白目录
- css实用样式
- css--下拉栏的几种设计
- css--图片阴影以及浮起的效果
- css--图片翻转二:自动翻转
- css--图片翻转一:滑过翻转
- css--三种loading特效
- css--图片遮罩效果实现
- css--又是三种loading特效
- css--带三角形的图形实现
- js demo
- 原生demo
- 1. 原生js实现轮播图
- 2. 倒计时按钮
- 3. 动态添加表格
- 4. checkbox全选反选
- 5. 小米登录方式切换
- 6. 点击事件
- 7. 个人网页导航条(二)点击滚动
- 8. 瀑布流实现!
- 9. 个人网页导航条(一)滑动固定
- 10. 定时器实现淡入淡出效果
- 11. 轮播图setTimeout版
- jQuery demo
- 1. 轮播图实现!
- 2. 成都小风车导航特效
- html组件
- html--导航栏(家居医生)
- html--登录页面(小米登录)
- html--响应式导航条(木兮地板)
- html--搜索栏
- Vue demo
- 1. mvvm实现动态添加表格
- 2. 豆瓣TOP250渲染
- 3. 制作一段跑马灯文字
- 3.1. vue 单行文字自动跑马灯效果
- 4. 利用豆瓣接口搜索书籍
- 5. 制作简易计算器
- 6. 创建一个点赞组件
- 7. 列表添加删除动画
- 8. isShow手风琴原理
- 9. tab栏切换