,//css
,//这里面的填充用填充值,因为offsetHeight是包括一个填充而不包括保证金的方便以后高度的测量
* {
,保证金:0 px;
,填充:0 px;
}
#{主要
,位置:相对;//在主要上设置相对定位,在JS给框设置绝对定位,来控制图片位置
}
.box {
,填充:15 px 0, 0, 15 px,,
,浮动:左;
}
.pic {
,填充:10 px;
,边界:1 px solid # ccc;
,这个特性:5 px;
,不必:0,0,5 px # ccc;
}
.pic img {
,宽度:168 px;//瀑布流统一宽度但不同一高度,高度为自适应就好
高度:大敌;汽车;
}
JS代码
在我们写JS代码之前,我们需要搞明白我们需要什么方法,是否需要封装起来调用,我们第一步要干什么,
那么我们第一步要干什么呢?我们做瀑布流首先要做的是获取到所有小部件也就是盒子,我们无论做什么处理都是对盒子的处理或者img的处理,所以要获取到所有的盒子,所以我们可以把它封装起来
//根据类获取元素
clsName function getByClass(父){//传入父元素和想要的类
,var boxArr=new //用数组来存储获取到所有类为盒子的元素,可以用对象的方式也可以用[]创建
,oElements=parent.getElementsByTagName(& # 39; * & # 39;);//取出所有子元素
,for (var 小姐:=,0;,小姐:& lt;, oElements.length;,我+ +),{//我们需要遍历所有的子元素
如果才能(oElements[我].className==clsName)//如果我们找到了相应的子元素
,,boxArr.push (oElements[我]);//取出传过来相等的名称
,,//推是数组自带的方法
,};
,return boxArr返回数组
}
这样我们就得到了我们想要的类,之后该怎么办呢,先从一个框下的手,我们需要取得第一排到底有多少个元素,因为之前我们并没有确定我们主要的宽度,所以是自适应的也就是说我们把页面缩小,我们每一排的元素也会相应的减少,为了能让瀑布流的代码有更好的应用性,让不同尺寸的图片都可以应用,所以,我们需要手动计算一排究竟可以放多少张图片呢,那如何计算呢?
我们可以算出页面总宽在框的宽,就好了
, var oBoxW=oBoxs [0] .offsetWidth;//框的宽,提到了里面计算了填充的值
,var秘密地=Math.floor (document.documentElement.clientWidth/oBoxW)//求列数
,这样我们就求出了列数,无论图片的宽度如何变,我们都可以算出来
,地板是用来取整数的,因为我们的px是没有浮点数类型的避免计算错误,所以取整
,oparent.style.cssText=& # 39;宽度:& # 39;+ oBoxW *秘密地+ & # 39;px;保证金:0 # 39;汽车;
,设置主要的宽度
引用> 我们已经取得了列数之后呢我们第一排的图片肯定是一排宽度相等,长度不一是吧,也就是说,我们第二排的图片需要接上第一排图片的后边,我们不能一排一排操作,但我们可以一个一个操作,怎么操作呢,我们可以取到第一排高度最小的将下一张图片,也就是如果第一排7个,那下一个就是第八个,把第八个图片放在最小高度的图片上,如何实现呢,我们先试想一下,我们首先需要求出第一排中最小,我们有一个数学。敏求最小,但是呢我们这个函数无法传入用数组,只能是具体的数怎么半呢,申请来扩展作用域
用代码展示下
var 冷雾=[];//每一列高度的值
,for (var 小姐:=,0;,小姐:& lt;, oBoxs.length;,我+ +),{
如果才能(i<秘密地){//先记录好第一排高度
,,hArr.push (oBoxs[我].offsetHeight);//放进去
其他,,}{//如果到达第二排,就开始计算
,,var 明=Math.min.apply(数学、冷雾);最小值计算
,,//为什么可以呢,本来不能传数组,我们通过应用绑定作用域在数学上,也就是说还是执行这个函数但是,应用第二个参数需要是数组,所以间接地把参数变成了数组传进的去,也就是说我们还是用了数学函数但值变成了数组里的值。
,,//console.log(明)
,,var 指数=getMinhIndex(冷雾,明)//获取索引
,,oBoxs[我].style.position=癮bsolute",我们就可以找到,传入数组和最小值
,,oBoxs[我].style.top=明+“px",那下一张图片的高度救球出来了
,,oBoxs[我].style.left=oBoxW *指数+“px";左边的距离就是索引乘以元素的宽
,,冷雾(指数)+=oBoxs[我].offsetHeight;//我们添加了一个图片后需要刷新数组里的高度,再去寻找下一个最小的,再向他的下面添加图片,一次循环
,,}
,};
val function getMinhIndex (arr) {
,(var 小姐:拷贝arr){//在其中找到最小值,返回索引
如果才能(arr[我]==val) {
,,return 我;
,,}
,}
}