写了个简单的vue+原生js瀑布流组件

写了个简单的vue+原生js瀑布流组件


废话不多说,上代码

<template>
  <div class="waterfall" :style="{height: waterfallHeight+'px'}">
    <div class="image" v-for="item in albumList" :key="item.paId">
      <img
        class="img"
        :src="item.paUrl ? 'https://xxx.xxx.xxx' + item.paUrl : ''"
        alt=""
        :style="{ width: oneWidth + 'px' }"
      />
    </div>
  </div>
</template>

<script>
export default {
  props: {
    albumList: {
      type: Array | Object,
      default: () => [],
    },
  },
  data() {
    return {
      oneWidth: 252,//单个图片的宽度,根据实际情况修改
      waterfallHeight:0
    };
  },
  mounted() {
    this.$nextTick(() => {
      this.DomLoad();
    });
  },

  methods: {
    DomLoad() {
      const detail_left_width =
        document.querySelector(".detail_left").offsetWidth;
      let rowArr = Array.apply(null, {
        length: Math.floor(detail_left_width / this.oneWidth),
      }).map((item) => (item = 0));
      const imageArr = document.querySelectorAll(".image");
      imageArr.forEach((ele, index) => {
        const minH = Math.min(...rowArr);
          const findindex = rowArr.indexOf(minH);
          ele.style.top = rowArr[findindex] + "px";
          ele.style.left = findindex * this.oneWidth + "px";
          rowArr[findindex] += ele.offsetHeight;
      });
      this.waterfallHeight = Math.max(...rowArr);
    },
  },
};
</script>

<style lang="less" scoped>
.waterfall {
  position: relative;
  .image {
    position: absolute;
    .img {
      height: auto;
      display: block;
    }
  }
}
</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值