vue瀑布流

<style>
  .contain {position: relative;}
  .item {position: absolute;}
</style>

<template>
  <div class="contain">
    <div class="item" v-for="(item,index) in pbList" :key="index" :style="item">
    </div>
  </div>
</template>

<script>
export default {
data() {
  return {
    pbList:[
      {
        height: '200px',
        border: '1px solid'
      },
      {
        height:'50px',
        border: '1px solid'
      },{
        height: '200px',
        border: '1px solid'
      },
      {
        height:'50px',
        border: '1px solid'
      },{
        height: '200px',
        border: '1px solid'
      },
      {
        height:'50px',
        border: '1px solid'
      },{
        height: '200px',
        border: '1px solid'
      },
      {
        height:'50px',
        border: '1px solid'
      },{
        height: '200px',
        border: '1px solid'
      },
      {
        height:'50px',
        border: '1px solid'
      },{
        height: '200px',
        border: '1px solid'
      },
      {
        height:'50px',
        border: '1px solid'
      },{
        height: '200px',
        border: '1px solid'
      },
      {
        height:'50px',
        border: '1px solid'
      }]
  }
},
methods: {
  waterFall(wrapIdName,contentIdName,columns=4,columnGap =20,rowGap=20){
    const  wrapContentWidth = document.querySelector(wrapIdName).offsetWidth - 8
    console.log(wrapContentWidth);
    const whiteArea = (columns -1) * columnGap
    const contentWidth = parseInt((wrapContentWidth - whiteArea)/columns)
    const contentList = document.querySelectorAll(contentIdName)
    const lineHeightList = []
    contentList.forEach((item,index)=>{
      item.style.width = contentWidth + 'px'
      const height = contentList[index].clientHeight
      console.log(height);
      if(index<columns){
        contentList[index].style.top = 0
        contentList[index].style.left = (contentWidth + columnGap) * index + 'px'
        lineHeightList.push(height)
      }
      else{
        console.log('----------');
        let minHeight = Math.min(...lineHeightList)
        console.log(minHeight);
        console.log(lineHeightList);
        let i = lineHeightList.findIndex(item => item === minHeight)
        console.log(i);
        contentList[index].style.top = minHeight + rowGap + 'px'
        contentList[index].style.left = (contentWidth + columnGap) * i + 'px'
        lineHeightList[i] += (height + columnGap)
      }
    })
  }
},
mounted() {
  this.waterFall('.contain','.item')
  window.onresize = () => {
    return (()=>{
      console.log('resize');
      this.waterFall('.contain','.item')
    })()
  }
},
}
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值