图片按需加载

747 阅读1分钟
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <style>
    img {
      display: block;
      margin-bottom: 50px;
      width: 400px;
      height: 400px;
    }
  </style>
</head>
<body>
  <img src="./img/default.JPG" data-src="./img/new.JPG" alt="">
  <img src="./img/default.JPG" data-src="./img/new.JPG" alt="">
  <img src="./img/default.JPG" data-src="./img/new.JPG" alt="">
  <img src="./img/default.JPG" data-src="./img/new.JPG" alt="">
  <img src="./img/default.JPG" data-src="./img/new.JPG" alt="">
  <img src="./img/default.JPG" data-src="./img/new.JPG" alt="">
  <img src="./img/default.JPG" data-src="./img/new.JPG" alt="">
  <img src="./img/default.JPG" data-src="./img/new.JPG" alt="">
  <img src="./img/default.JPG" data-src="./img/new.JPG" alt="">
  <img src="./img/default.JPG" data-src="./img/new.JPG" alt="">
  <img src="./img/default.JPG" data-src="./img/new.JPG" alt="">
  <script>
    let num = document.getElementsByTagName('img').length;
    let img = document.getElementsByTagName("img");
    let n = 0; //存储图片加载到的位置,避免每次都从第一张图片开始遍历

    lazyload(); //页面载入完毕加载可是区域内的图片

    window.onscroll = lazyload;

    function lazyload() { //监听页面滚动事件
      let seeHeight = document.documentElement.clientHeight; //可见区域高度
      let scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滚动条距离顶部高度
      for (let i = n; i < num; i++) {
        if (img[i].offsetTop < seeHeight + scrollTop) {
          if (img[i].getAttribute("src") == "./img/default.JPG") {
            img[i].src = img[i].getAttribute("data-src");
          }
          n = i + 1;
        }
      }
    }
  </script>

</body>

</html>