问答详情
源自:2-4 JavaScript实现瀑布流布局中图片排序

为什么不是第二行的第一张图片?

css代码

---------------------------------------------

*{

margin: 0;

padding: 0

}


#main{

position:relative; 

}


.box{padding: 15px 0 0 15px;float: left;}


.pic{

padding: 10px;

border: 1px solid #ccc;

border-radius:5px;

box-shadow: 0 0 5px #ccc;

}


.pic img{

width: 230px;

height: auto;

}

-----------------------------------

js代码

-----------------------------------

window.onload=function(){

waterfall('main','box');

}

function waterfall(parent,box){

//将main下的所有claa 为box的元素取出来

var oParent=document.getElementById(parent);

var oBoxs=getByClass(oParent,box);

//console.log(oBoxs.length);

//计算整个页面显示的列数(页面宽/box的宽)

var oBoxW=oBoxs[0].offsetWidth;

//console.log(oBoxW);//267=图片宽度230+内边距10*2+边框宽度1*2+15

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

//console.log(cols);

//设置main的宽,属性style.cssText可以使css样式以字符串形式设置进来

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

var hArr=[];//存放每一列高度的数组

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

if(i<cols){

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

}else{

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

/*apply方法能劫持另外一个对象的方法,

继承另外一个对象的属性.

Function.apply(obj,args)方法能接收两个参数

obj:这个对象将代替Function类里this对象

args:这个是数组,它将作为参数传给Function.*/

//console.log(minH);

var index=getMinhIndex(hArr,minH);

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

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

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

}

}

console.log(hArr);

}

//根据class获取元素

function getByClass(parent,clsName){

var boxArr=new Array(),//用来存储获取到的所有class 为box的元素

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){//遍历arr数组

if(arr[i]==val){

return i;

}

}

}

-----------------------

http://img.mukewang.com/572856490001cf7b05290568.jpg

提问者:Python程序猿 2016-05-03 15:42

个回答

  • qq_撒浪大白_0
    2016-05-03 21:50:13

    没有更新数组hArr