哦哦,谢谢大神指点
"for
(
var
i
in
val)" i应该在arr中,写错了,已解决?
已解决
我验证了一下,可以使用。
设置这个 getMinhIndex 变量存储数组中最小高度值的下标 for in 是遍历对象使用的方法 百度一搜就出来了
浏览器的兼容问题
还有clientWidth 是系统保留字啊, 你最好别用
响应式的页面应该是页面内容随着浏览器窗口的大小变化而变化,瀑布流应该是随着滚动条的滚动(高度变化)而变化
可能吧 你可以试试 实践是检验真理的唯一标准。
这个问题我也遇到了,我研究了一下午。是offsetWidth的问题。我console获取到值为201,但是实际盒子宽度为202,故第一行最后一张图,超边。
解决方案:
修改前:oParent.style.cssText='width:'+aBoxW*cols+'px;margin:auto';
修改后:oParent.style.cssText='width:'+202*cols+'px;margin:auto';
正确显示,不谢!
<div id="main">的postition声明为relative,这样它内部的元素进行绝对定位时的参照就是main了,而不是整个页面了。左边没有margin。
hArr[index]+=oBoxs[i].offsetHeight就是hArr[index]=hArr[index]+oBoxs[i].offsetHeight的意思!
另外这是个大循环 for (var i=0;i<oBoxs.length;i++) 遍历每一张图 视频中cols=6(所以hArr数组的长度为6),当i=5时,hArr数组保存了6张图的高(分别是266,286,160,146,155,147),当i=6时(这是进行第7次循环)执行else后面的代码,取出hArr中最小的值minH=146和索引index=3;然后把图片放在第4张图下面;
如果没有hArr[index]+=oBoxs[i].offsetHeight; 进行 i =7(第8次循环),获得的minH和index和之前是一样的,一直到i=oBoxs.length-1;结束循环 所有图片会放在同一位置!
实际在进行i=7时,第四张图下面已经有一张图了,必然hArr[3]的高度不再是146,而是146加上上一张图的高度
也就是hArr[3]=hArr[3]+oBoxs[6].offsetHeight;
ps:数组下标是从0开始的。
父盒子js设置宽度
这里是碰到等于该值的就返回i,所以哪个索引号小就先排在哪个后面。
找到最矮的那张的下标,然后得出它的offsetLeft,offsetHeight;最后第二组第一张图片定位为 top:offsetHeight+‘px’; left:offsetLeft+'px';
for in 循环,在JavaScript中是遍历对象的可枚举属性,数组也是对象,由索引和元素值构成。数组索引是具有整数名称的可枚举属性,所以遍历数组时每次循环变量i的值是数组中当前元素的索引。
可以到各大网站看看文档资料啥的。
代码贴出来
' '里面是字符串,你的代码就是这个意思{width:(oBoxsW * cols)px +margin: 0 auto}你觉得这是一个正常的CSS样式吗?{width:(oBoxsW * cols)px;margin: 0 auto}应该是这样的
第24最后好像没加 'px'
arr 是一个数组,目的应该是为了获取数组里的arr的高度,有两种写法
1.arr[i]=Box[i].offsetHeight(若设外边距需注意)
2.arr.push(Box[i].offsetHeight)
不懂再回复
apply()是函数的非继承而来的方法,用途是在指定的作用域中调用函数,实际上等于设置函数体内的this对象的值,第一个参数是运行函数作用域,另一个是参数数组
你可以看下前面有个if (i < cols)这里指的是第一行的所有列,当i>cols指的是其他行,oBoxs[i].style.top = minH+'px';是加在其他行上的
可是有时候打印出来console.log(OboxsH)高度有时候对有时候不对,好困惑。
是第一列图像里面高度最小的那个图像的高度
var obj = boxs[index];
var left = obj.offsetLeft;
var height1 = obj.offsetHeight;
hArr[index]+=height1;
貌似height1应该是
boxs[i].offsetHeight才对,
boxs[index].offsetHeight求的始终是第一行的索引为index的值
offsetLeft 不包括padding
代码没错啊,你是不是只写了一个div啊
在这里无所谓吧,用Math.min.apply只会取到第一个最小值;如果非要取出所有的最小值,用循环吧...
还有var boxarr=new Array();//存放属性值为box的数组
oelement=parent.getElementsByTagName('*');第一个分号改成逗号