課程
/前端開發(fā)
/JavaScript
/瀑布流布局
這個有bug啊,把瀏覽器窗口縮小時滾動式正常的,但是放大后就會有重疊現(xiàn)象出現(xiàn)了,怎么解決呢
2016-06-09
源自:瀑布流布局 2-5
正在回答
縮放頁面并且滾動時會執(zhí)行waterfall函數(shù),此時clientWidth發(fā)生變化,所以列數(shù)num也會發(fā)生變化;如果是縮小,那么原來在第一行的元素會被擠到下面,變成絕對定位,頁面重排;放大的話,num變大,原來在第二列的元素是絕對定位,不會回到第一排,所以部分i<num的aPin[i]仍在第二排,而在for循環(huán)中
for(var?i=0;i<aPin.length;i++){//遍歷數(shù)組aPin的每個塊框元素 ????????var?pinH=aPin[i].offsetHeight; ????????if(i<num){ ????????????pinHArr[i]=pinH;?//第一行中的num個塊框pin?先添加進(jìn)數(shù)組pinHArr ????????}else{ ????????????var?minH=Math.min.apply(null,pinHArr);//數(shù)組pinHArr中的最小值minH ????????????var?minHIndex=getminHIndex(pinHArr,minH); ????????????aPin[i].style.position='absolute';//設(shè)置絕對位移 ????????????aPin[i].style.top=minH+'px'; ????????????aPin[i].style.left=aPin[minHIndex].offsetLeft+'px'; ????????????//數(shù)組?最小高元素的高?+?添加上的aPin[i]塊框高 ????????????pinHArr[minHIndex]+=aPin[i].offsetHeight;//更新添加了塊框后的列高 ????????}
會把i<num的aPin[i]當(dāng)成第一排,導(dǎo)致頁面出現(xiàn)錯誤。
可以在for循環(huán)前面加一個
for(var?j?=?0;?j?<?num?;j++){ ????aPin[j].style.position=""; ????}
清除掉i<num的aPin[i]的絕對定位,就ok了。
滿滿肥肉的夏天 提問者
把var cols=Math.floor(document.documentElement.clientWidth/OboxW);改成
var cols=Math.floor(document.documentElement.scrollWidth/OboxW);就好了
舉報
瀑布流布局是網(wǎng)站比較流行的一種布局方式,教你實(shí)現(xiàn)三大方式
2 回答窗口比例縮小時滾動滾動條會有bug
2 回答發(fā)現(xiàn)BUG!窗口先縮小再放大后拖動滾動條圖片列數(shù)沒變,且最右列圖片重疊!
2 回答當(dāng)瀏覽器窗口縮小或者放大時,列數(shù)仍會隨之改變
1 回答為什么在360瀏覽器圖片會重疊?。???火狐瀏覽器有正常顯示。。。。jQuery有兼容么?????
1 回答我再瀑布流窗口加了監(jiān)聽事件,放大的時候就排列重疊了,縮小的就不會出問題,但是一刷新就可以,怎么實(shí)時更新
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2016-06-09
縮放頁面并且滾動時會執(zhí)行waterfall函數(shù),此時clientWidth發(fā)生變化,所以列數(shù)num也會發(fā)生變化;如果是縮小,那么原來在第一行的元素會被擠到下面,變成絕對定位,頁面重排;放大的話,num變大,原來在第二列的元素是絕對定位,不會回到第一排,所以部分i<num的aPin[i]仍在第二排,而在for循環(huán)中
會把i<num的aPin[i]當(dāng)成第一排,導(dǎo)致頁面出現(xiàn)錯誤。
可以在for循環(huán)前面加一個
清除掉i<num的aPin[i]的絕對定位,就ok了。
2017-05-31
把var cols=Math.floor(document.documentElement.clientWidth/OboxW);改成
var cols=Math.floor(document.documentElement.scrollWidth/OboxW);就好了