瀑布流的原理劲腿?
首先針對等寬不等高的子元素進行瀑布流布局俏险,其中每一個子元素都是針對父容器進行絕對定位的,類似于第四象限中水由,每一個元素的left和top荠呐,都是由js來計算坐標,并且安排放置在頁面上的砂客;
看看效果圖!
- 瀑布流的布局思路:
下一排的子元素都是來找上一排最短的一列進行排隊泥张;
- 子元素如何找到最短隊列,并進行排隊:
找最短的隊列鞠值,那就必須有隊列媚创,這里將隊列的個數(shù)轉(zhuǎn)換成數(shù)組子元素的個數(shù),將這個隊列的長短轉(zhuǎn)換成數(shù)組對應子元素的數(shù)值彤恶,找到最短的隊列就可以轉(zhuǎn)換成找到現(xiàn)在這個數(shù)組里面數(shù)值最小元素的下標钞钙,記為
n
;
- 絕對定位后粤剧,子元素的偏移值如何用JS獲得:
在上一步中歇竟,找到了數(shù)值最小的元素的下標
n
,那么Y軸(top)上的偏移已經(jīng)找到了抵恋,那么X軸(left)(決定入哪一個隊列)就可以通過n
*子元素的寬度(如果你設置了margin焕议,請務必也加上margin的值)獲得,然后讓這個元素按照獲得的坐標弧关,放置到父容器中去盅安;
- 為下一個元素的準備:
瀑布流一般有很多等寬不等高的元素,所以記得上一次操作后世囊,更新這個數(shù)組里面下標為
n
的數(shù)值别瞭,也就是加上你排隊的這個元素的高度(如果你設置了margin,請務必也機上margin值)株憾,更新最短隊列的狀態(tài)蝙寨,以免出錯。