關于最后利用什么原理把重疊的分開,以及怎么讓后面的元素找到那個矮的元素呢?求詳解
從代碼20開始就有些看不明白了,麻煩把每個代碼意思幫我理一理,多謝》
問1:一排6個,他是怎么讓后面的比如第7個找到最低的圖片排列過去的呢?boxs[i]沒說具體是哪個啊
問2:他是怎么把重疊的圖片分開的呢?harr[index] += oboxs[i].offsetHeight; 這里的【index】不是最小高 = 最小高+某一元素的自身高度 么?那也沒有寫他的left top 是多少啊,利用社呢原理分開的呢
//獲取classname為cls的數(shù)組
?? ??? ?function getByClass(parent,cls){
?? ??? ??? ?var boxArr = new Array(),????? //存儲class為box的元素
?? ??? ??? ? ??? ?oelements = parent.getElementsByTagName("*");
?? ??? ??? ?for(var i=0; i<oelements.length; i++){
?? ??? ??? ? ??? ?if(oelements[i].className == cls){
?? ??? ??? ? ??? ??? ?boxArr.push(oelements[i]);
?? ??? ??? ? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?return boxArr;
?? ??? ?}
?? ??? ?//獲取最小值的索引,如果arr數(shù)組中的某一個等于我們傳的數(shù)字val,返回他索引
?? ??? ?function getIndex(arr,val){
?? ??? ??? ?for(var i in arr){
?? ??? ??? ??? ?if(arr[i]==val){
?? ??? ??? ??? ??? ?return i;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
2017-11-20
hArr[index]+=oBoxs[i].offsetHeight就是hArr[index]=hArr[index]+oBoxs[i].offsetHeight的意思!
另外這是個大循環(huán)?for (var i=0;i<oBoxs.length;i++) 遍歷每一張圖 視頻中cols=6(所以hArr數(shù)組的長度為6),當i=5時,hArr數(shù)組保存了6張圖的高(分別是266,286,160,146,155,147),當i=6時(這是進行第7次循環(huán))執(zhí)行else后面的代碼,取出hArr中最小的值minH=146和索引index=3;然后把圖片放在第4張圖下面;?
如果沒有hArr[index]+=oBoxs[i].offsetHeight; 進行 i =7(第8次循環(huán)),獲得的minH和index和之前是一樣的,一直到i=oBoxs.length-1;結(jié)束循環(huán) 所有圖片會放在同一位置!
實際在進行i=7時,第四張圖下面已經(jīng)有一張圖了,必然hArr[3]的高度不再是146,而是146加上上一張圖的高度
也就是hArr[3]=hArr[3]+oBoxs[6].offsetHeight;
ps:數(shù)組下標是從0開始的。
2017-11-20
答1;16-17行把前6個的高度放入oBoxs【】;然后19行獲得高度最小的那一個,20行利用getMinhIndex()得到高度最低那個的索引,最后利用絕對定位21-24行固定下一張的位置;
答2:這個時候我們看見第7張后面所有的圖片都重合了,因為oBox數(shù)組的值沒有改變,導致下一次循環(huán)第19行獲得的最小高度是相同的,因此我們每排列一張圖片就要把它的高度加在對應的數(shù)組下面參見第25行!
具體過程:
var hArr=[];
?//循環(huán)遍歷每一張圖片
?for (var i=0;i<oBoxs.length;i++) {
? //下雨cols的圖片正常擺放并將高度放如hArr;
? if(i<cols){
? hArr.push(oBoxs[i].offsetHeight);
? }else{
? //取出hArr中高度最小的的值,并用minH保存
? var minH=Math.min.apply(null,hArr);
? //console.log(minH);
? //取出高度最小的值在數(shù)組hArr中的索引
? var index=getMinhIndex(hArr,minH);
? //固定下一張圖的位置
? oBoxs[i].style.position='absolute';
? oBoxs[i].style.top=minH+'px';
? console.log(oBoxW);
? oBoxs[i].style.left=oBoxW*index+'px';
? //將添加的圖片的值加如對應的hArr數(shù)組中;hArr[index]表示數(shù)組中最小的那個,oBoxs[i]代表即將剛放入的圖片
? hArr[index]+=oBoxs[i].offsetHeight;
? }
?}
}