Skip to content

waterFall

瀑布流布局函数-定位的实现方式(父绝子相,子元素须设置宽度)

配置项

参数类型是否必选默认值参数描述
classNameString-子元素类名
columnsNumber3列数
columnGapNumber0列之间的间距
rowGapNumber0行之间的间距

返回值

类型描述
void无返回值

示例

waterFall('item', 3, 10, 10)

源码

js
export function waterFall(className, columns = 3, columnGap = 0, rowGap = 0) {
    // 获取待排序的所有DOM元素
    let items = document.getElementsByClassName(className);
    // 获取待排序的元素块的宽度
    let itemWidth = items[0].offsetWidth;
    // 用来存储每一列的高度
    let columnHeightArr = new Array(columns).fill(0);
    for (let i = 0; i < items.length; i++) {
        // 最小高度,minHeight=0 说明是第一行
        let minHeight = Math.min(...columnHeightArr);
        let newRowGap = minHeight ? rowGap : 0;
        // 最小高度列的索引
        let index = columnHeightArr.findIndex(item => item === minHeight);
        items[i].style.top = minHeight + newRowGap + 'px';
        items[i].style.left = (itemWidth + columnGap) * index + 'px';
        columnHeightArr[index] = minHeight + items[i].offsetHeight + newRowGap;
    }
}