原生js实现瀑布流思想

原理

图片定位:

  • position:absolute;
  • top:最小图片的高度;
  • left:最小图片索引*图片的宽度
    image.png
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    .img {
      position: relative;
    }

    .img div {
      width: 22rem;
      float: left;
    }

    .img img {
      width: 22rem;
      height: auto;
    }
  </style>
</head>

<body>
  <div class="img">
    <div><img src="./img/img (1).jpg" alt=""></div>
    <div><img src="./img/img (2).jpg" alt=""></div>
    <div><img src="./img/img (3).jpg" alt=""></div>
    <div><img src="./img/img (4).jpg" alt=""></div>
    <div><img src="./img/img (5).jpg" alt=""></div>
    <div><img src="./img/img (6).jpg" alt=""></div>
    <div><img src="./img/img (7).jpg" alt=""></div>
    <div><img src="./img/img (8).jpg" alt=""></div>
    <div><img src="./img/img (9).jpg" alt=""></div>
    <div><img src="./img/img (10).jpg" alt=""></div>
    <div><img src="./img/img (11).jpg" alt=""></div>
    <div><img src="./img/img (12).jpg" alt=""></div>
  </div>
</body>

<script>
  window.onload = function () {
    this.pubu();
  }

  function pubu() {
    let imgs = document.getElementsByTagName('img')
    imgs = [...imgs]
    let imgW = imgs[0].offsetWidth //当前图片宽度
    let windowW = window.innerWidth //当前屏幕宽度
    let cols = parseInt(windowW / imgW) //列数
    let heightArr = []
    // 遍历第一排不需要定位
    for (let i = 0; i < imgs.length; i++) {
      // heightArr.push(imgs[i].height)
      var imgH = imgs[i].height;
      if (i < cols) { //是不是第一排
        heightArr[i] = imgH;
      } else {
        //  求出数组最小值
        var minImgH = Math.min(...heightArr);
        console.log(heightArr);
        var index = heightArr.findIndex((value) => {
          return value == minImgH
        })

        imgs[i].style.position = 'absolute';
        imgs[i].style.left = index * imgW + 'px';
        imgs[i].style.top = minImgH + 'px';
      }
      // 高度追加
      heightArr[index] += imgH;
    }
  }
</script>

</html>

实现效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值