懒加载的实现原理

61 阅读1分钟
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
  <img src="loading.jpg" data-src="zy.jpg" alt=""> <br>
</body>
<script>
  let num = document.getElementsByTagName('img').length  // 9
  let img = document.getElementsByTagName('img')
  let n = 0
  lazyload()
  window.onscroll = lazyload
  function lazyload() {
    // 可见区域高度
    let seeHeight = document.documentElement.clientHeight
    // 滚动条距离顶部的高度
    let scrollTop = document.documentElement.scrollTop
    for (let i = n; i < num; i++) {
      if (img[i].offsetTop < seeHeight + scrollTop) {
        // if (img[i].getAttribute("src") === 'loading.jpg') {
        img[i].src = img[i].getAttribute('data-src')
        // }
        n = i + 1
      }
    }
  }
</script>

</html>