// 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;
}
}
}
这个问题我也遇到了,我研究了一下午。是offsetWidth的问题。我console获取到值为201,但是实际盒子宽度为202,故第一行最后一张图,超边。
解决方案:
修改前:oParent.style.cssText='width:'+aBoxW*cols+'px;margin:auto';
修改后:oParent.style.cssText='width:'+202*cols+'px;margin:auto';
正确显示,不谢!
cols不用减一吧。在判断的时候:
if(i<cols-1){
hArr.push(oBoxs[i].offsetHeight);
}else{