瀑布流div版
2017-11-06 本文已影响0人
Farewell_V587
瀑布流
瀑布流是一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。最早采用此布局的网站是Pinterest,逐渐在国内流行开来。国内大多数清新站基本为这类风格。
瀑布流特点:
1、琳琅满目:整版以图片为主,大小不一的图片按照一定的规律排列。
2、唯美:图片的风格以唯美的图片为主。
3、操作简单:在浏览网站的时候只需要轻轻滑动一下鼠标滚轮,一切的美妙的图片精彩便可呈现在你面前。
1.思路
每次生成高度随机的div,将页面分成几块,每次插入新的div之前先找到高度最小的块依次取容器中的所有数据块,先寻找当前高度最小的某列,之后根据列序号,确定数据块的left,top值,left 为所在列的序号乘以列宽,top 为所在列的当前高度,最后更新所在列的当前高度加上这个数据块元素的高度,至此,插入一个元素结束;
·当所有元素插入完毕后,调整容器的高度为各列最大的高度值,结束依次调整。
2.效果 瀑布流
先将CSS部分和HTML部分写好
image.png
将样式写好以后就开始我们的JS部分吧
首先我们要获取我们需要的整体
var wrap = document.getElementsByClassName("wrap")[0];
然后在for循环中遍历创建20个div
for (var i=1;i<21;i++){
var lis = document.createElement('div');
var random = parseInt(Math.random()*150+50);//随机生成li高度
//设置生成的li的样式
lis.style.height = random+"px";
lis.style.backgroudColor ="red";
lis.innerHTML=i;
lis.style.width="200px";
lis.style.position="absolute";
//设置最矮的块的下标
var minIndex = 0;
//将高度存进数组里;
var arr =[0,0,0,0,0];
//遍历几个块,找寻最矮高度的块
for (var j = 0; j < arr.length; j++){
if (arr[minIndex] > arr[j]){
minIndex = j;
}
console.log(minIndex);
}
//设置li的top值和left值
lis.style.top=arr[minIndex]+"px";
lis.style.left = 210*minIndex+"px";
//数组里的最矮高度的那个值加上要添加进去的那个div高度值
arr[minIndex]+=(randomS+10);
//将这个div添加到wrap中
wrap.appendChild(lis);
}
核心代码