图片懒加载

IntersectionObserver 实现图片懒加载

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>IntersectionObserver</title>
    <style>
      .image p {
        width: 300px;
        height: 400px;
        overflow: hidden;
        background-color: #ddd;
      }
      .image img {
        display: block;
        width: 100%;
        height: 450px;
        transition: 0.3s;
        opacity: 0;
        transform: scale(0.95) translateY(0);
      }
      .image img.show {
        opacity: 1;
        transform: scale(1) translateY(-10px);
      }
    </style>
  </head>
  <body>
    <div class="image-container">
      <div class="image">
        <p><img data-src="http://starloopfilm.com/assets/pic/b99f/de7f/thumb_6eb6.jpg" /></p>
        <p><img data-src="http://starloopfilm.com/assets/pic/b99f/de7f/thumb_f7c0.jpg" /></p>
        <p><img data-src="http://starloopfilm.com/assets/pic/b99f/de7f/thumb_e98f.jpg" /></p>
        <p><img data-src="http://starloopfilm.com/assets/pic/b99f/de7f/thumb_10cc8.jpg" /></p>
        <p><img data-src="http://starloopfilm.com/assets/pic/b99f/de7f/thumb_f570.jpg" /></p>
        <p><img data-src="http://starloopfilm.com/assets/pic/b99f/de7f/thumb_27d5.jpg" /></p>
      </div>
    </div>
    <script>
      const imgs = document.querySelectorAll("img")

      const observer = new IntersectionObserver((changes) => {
        changes.forEach((change) => {
          let el = change.target
          if (change.isIntersecting) {
            el.src = el.dataset.src
            el.className = "show"
          } else {
            el.className = ""
          }
        })
        // observer.unobserve(el)
      })
      imgs.forEach((img) => observer.observe(img))
    </script>
  </body>
</html>