懒加载的实现,运用

图片懒加载的应用场景

懒加载(Lazy-Load)。它是针对图片加载时机的优化

图片懒加载的目的

懒加载 的目的是当页面的图片进入到用户的可视范围之内再加载图片的一种优化方式。

图片懒加载的实现原理

  • 图片的加载是由src 引起的,当对src 赋值时,浏览器就会请求图片资源。根据这个原理,我们使用HTML5 的data-xxx 属性来储存图片的路径,在需要加载图片的时候,data-xxx 中图片的路径赋值给src,这样就实现了图片的按需加载,即懒加载。

  • 注意:data-xxx 中的xxx 可以自定义,这里我们使用data-src 来定义。

  • 懒加载的实现重点在于确定用户需要加载哪张图片,在浏览器中,可视区域内的资源就是用户需要的资源。所以当图片出现在可视区域时,获取图片的真实地址并赋值给图片即可

<!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" />
    <!-- 破解图片防盗链 -->
    <meta name="referrer" content="no-referrer" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      .list img {
        width: 160px;
        height: 160px;
        border: 1px solid #000;
      }
    </style>
  </head>
  <body>
    <div class="list">
      <ul></ul>
    </div>
    <script src="./js/flowerData.js"></script>
    <script>
      //获取窗口的高度
      let winHeight = window.innerHeight;
      let ulEl = document.querySelector(".list ul");

      //初始化渲染所有的商品信息
      function init() {
        let html = "";
        flowerData.forEach((item) => {
          html += `<li><a href="#"><p>名称:${item.name}</p><p><img src="./img/img-placeholder.png" alt="" data-src="${item.pic}" class="lazy"></p></a></li> `;
        });
        ulEl.innerHTML = html;
      }
      //初始化显示已经在可视窗口中的图片
      function lazyLoad() {
        let imgList = document.querySelectorAll(".lazy");
        imgList.forEach((pic) => {
          //获取当前图片距离可视窗口顶端的偏移值
          // let offsetTop = pic.getBoundingClientRect().top;
          let offsetTop = pic.offsetTop - document.documentElement.scrollTop;
          if (offsetTop <= winHeight) {
            //说明图片已经在可视窗口
            pic.src = pic.dataset.src;
            pic.classList.remove("lazy")
          }
        });
      }
      init();
      lazyLoad();
      window.addEventListener("scroll", lazyLoad);
    </script>
  </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值