图片懒加载

介绍

懒加载是一种网页性能优化的方式,能极大的提升用户的体验,图片一直是影响网页性能的主要因素,现在一张清晰的图片动则几M是很正常的事情了。如果每次进入页面就请求所有的图片资源,那么可能等图片加载出来用户早就离开了。所以我们需要对图片进行懒加载,进入页面的时候只对可视区域的图片进行资源请求。

多图片网页不使用懒加载的话就会造成以下两个问题:

  1. 全部加载图片影响用户体验
  2. 浪费用户流量,网页中其实有些内容用户其实并不想看完。

HTML实现方式

懒加载最简单的实现方式就是给img标签加上loading="lazy"
<img src="./img.png" loading="lazy">
loading 有两个属性值 eager:默认,图像立即加载,lazy:图片延迟加载。
示例:

从图中图片资源加载的顺序来看lazy是起作用了,改变了原有img资源加载的顺序。这个时候可能就会有人问,这种方式还是浪费了用户流量,所有图片资源都加载了。所以有了下面这种方式

JS实现方式

我们可以通过js监听页面的滚动来进行实现比上面的方式更好。

使用js来处理的原理是判断当前图片是否到了可视区域:

  1. 拿到所有图片的dom
  2. 遍历每个图片判断当前图片是否到了可视区域的范围内。
  3. 到了就是设置src的值。
  4. 使用window.scroll对事件进行监听

实现代码如下:

<!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>
  <style>
    .img-box {
      display: flex;
      justify-content: center;
      align-items: center;
      flex-direction: column;
    }
    .img-box img {
      display: block;
      height: 300px;
      width: auto;
      margin-bottom: 20px;
    }
  </style>
</head>
<body>
  <div class="img-box" id="imgBox">
    <img src="./images/zw.jpg" data-src="./images/bg1.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg2.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg3.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg4.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg5.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg6.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg7.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg8.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg9.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg10.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg11.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg12.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg13.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg14.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg15.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg16.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg17.jpg" alt="">
    <img src="./images/zw.jpg" data-src="./images/bg18.jpg" alt="">
  </div>
</body>
<script>
  function lazyLoadImg() {
    let portHeight = window.screen.availHeight; // 可视区域高度
    let imgList = document.querySelectorAll('img[data-src]'); // 获取所有需要懒加载的图片
    imgList.forEach((imgItem, index) => {
      if (imgItem.dataset.src === "") {
        return false;
      }
      let imgCurrent = imgItem.getBoundingClientRect();
      if (imgCurrent.bottom >= 0 && imgCurrent.top < portHeight) {
        imgItem.src = imgItem.dataset.src;
        imgItem.removeAttribute('data-src');
      }
    })
  }
  lazyLoadImg();
  window.addEventListener('scroll', lazyLoadImg);
</script>
</html>

效果图:

在线地址:图片懒加载示例

posted @   明月南楼  阅读(268)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示