为了账号安全,请及时绑定邮箱和手机立即绑定

console.log(clos)输出列数为7,浏览器显示为6列,且前第七个和第八个图片(第二列的一和二)没有内边距

// JavaScript Document

window.onload=function(){

waterfall("main","box");

}

function waterfall(parent,box){

var oParent=document.getElementById(parent);

getByClass(oParent,box);

var oBoxs=getByClass(oParent,box);

var aBoxW=oBoxs[0].offsetWidth;

var cols=Math.floor(document.documentElement.clientWidth/aBoxW);

oParent.style.cssText='width:'+aBoxW*cols+'px;margin:auto';

var hArr=[];

for(var i=0;i<oBoxs.length;i++){

if(i<cols-1){

hArr.push(oBoxs[i].offsetHeight);

}else{

var minH=Math.min.apply(null,hArr);

var index=getMinHIndex(hArr,minH);

oBoxs[i].style.position="absolute";

oBoxs[i].style.top=minH+'px';

//oBoxs[i].style.left=aBoxW*index+'px';

oBoxs[i].style.left=oBoxs[index].offsetLeft+'px';

hArr[index]+=oBoxs[i].offsetHeight;

}

}

console.log(cols);

console.log(hArr);

}

function getByClass(parent,clsName){

var boxArr=[];

oElements=parent.getElementsByTagName("*");

for(var i=0;i<oElements.length;i++){

if(oElements[i].className==clsName){

boxArr.push(oElements[i]);

}

}

return boxArr;

}

function getMinHIndex(arr,val){

for(var i in arr){

if(arr[i]==val){

return i;

}

}

}


正在回答

2 回答

这个问题我也遇到了,我研究了一下午。是offsetWidth的问题。我console获取到值为201,但是实际盒子宽度为202,故第一行最后一张图,超边。

解决方案:

修改前:oParent.style.cssText='width:'+aBoxW*cols+'px;margin:auto';

修改后:oParent.style.cssText='width:'+202*cols+'px;margin:auto';

正确显示,不谢!


0 回复 有任何疑惑可以回复我~

cols不用减一吧。在判断的时候:

if(i<cols-1){

hArr.push(oBoxs[i].offsetHeight);

}else{


0 回复 有任何疑惑可以回复我~
#1

qq_付注东流的岂止是时间_03709607 提问者

之前和老师的一样不减一就没有效果,可能是我电脑分辨率及图片大小的原因吧
2018-04-10 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

console.log(clos)输出列数为7,浏览器显示为6列,且前第七个和第八个图片(第二列的一和二)没有内边距

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信