123456789101112131415161718192021222324252627282930313233 |
- function fallBox(props: { ref: { children?: any, offsetWidth: number, style: any }, childrenWidth: number }) {
- let time = setTimeout(() => {
- let { ref: { children }, childrenWidth } = props
- let bodyW = props.ref.offsetWidth
- let column = Math.floor(bodyW / (childrenWidth))
- let margin = Math.floor((bodyW / column - childrenWidth) )
- let allH: number[] = []//所有列的高度
- let marginB = margin > 20 ? margin / 2 : margin
- children.forEach((chi: HTMLElement, index: number) => {
- let h = chi.offsetHeight
- if (index < column) {
- allH.push(h)
- chi.style.left = (childrenWidth + margin) * index + 'px'
- chi.style.top = '0px'
- chi.style.width = childrenWidth + 'px'
- chi.style.position = 'absolute'
- } else {
- let minH: number = Math.min(...allH)//取当前最小高度的children的值
- let eq = allH.indexOf(minH)//取当前最小高度children的位置
- allH[eq] = allH[eq] + h + marginB//更新列的高
- chi.style.left = eq === 0 ? '0px' : (childrenWidth + margin) * eq + 'px'
- chi.style.top = minH ? minH + marginB + 'px' : '0px'
- chi.style.width = childrenWidth + 'px'
- chi.style.position = 'absolute'
- }
- })
- props.ref.style.height = Math.max(...allH) + 20 + 'px'
- clearTimeout(time)
- }, 600)
- }
- export default fallBox
|