前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原生js实现图片懒加载

原生js实现图片懒加载

作者头像
且陶陶
发布2023-04-12 15:52:29
6.4K0
发布2023-04-12 15:52:29
举报
文章被收录于专栏:Triciaの小世界

目的:

  • 大量图片的网站,一次性加载所有图片会存在速度变慢,卡顿等问题。
  • 我们可以使用图片懒加载技术,只加载视口内的图片,其余图片用默认小图片 (由于所有图片都使用这一张小图片,只会发送一次请求,不会增加性能负担。) 或者骨架屏代替。
  • 等图片滚动到可视区后,再给图片url赋值。
  • 这样优化了前端加载速度,提高了性能

核心思路:

scrollTop 判断图片滚动的距离, innerHeight求当前视口高度,offsetTop得到图片相对于父元素的位置,然后scrollTop + clientH - elementTop - 图片自身的高度 得到元素当前的位置。 如果 >=0 说明该元素在视口内,给元素的url赋值

在这里插入图片描述
在这里插入图片描述

代码实现:

代码语言:javascript
复制
<!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>
    *{
        margin: 0;
        padding: 0;
    }
    ul{
        list-style: none;
    }
    li{
        width: 100%;    
        height: 200px;
        text-align: center;
        line-height: 200px
    }
    img{
        display: block;
        height: 200px;
    }
    </style>
</head>
<body>
  
  <!-- <img data-url="真实图片地址" src="小图片地址"/> -->
  <img src="./images/1pxImg.png" data-url="./images/01.jpg">
  <img src="./images/1pxImg.png" data-url="./images/01.jpg">
  <img src="./images/1pxImg.png" data-url="./images/02.jpg">
  <img src="./images/1pxImg.png" data-url="./images/02.jpg">
  <img src="./images/1pxImg.png" data-url="./images/03.jpg">
  <img src="./images/1pxImg.png" data-url="./images/03.jpg">
  <img src="./images/1pxImg.png" data-url="./images/04.jpg">
  <img src="./images/1pxImg.png" data-url="./images/04.jpg">

  
  <script>
    let imgs = document.querySelectorAll('img')
    console.log(imgs);
    scrollFn()
    // 监听滚动事件
    window.onscroll = scrollFn
    function scrollFn() {
      let clientH = window.innerHeight // 可视区高度
      let scrollTop = document.documentElement.scrollTop // 滚动的高度
      console.log(clientH, scrollTop)
      Array.from(imgs).forEach(item => {
        let elementTop = item.offsetTop // 元素相对于父元素的位置
        // console.log('eleTop', elementTop)
        let count = scrollTop + clientH - elementTop - item.height // 元素的位置
        console.log('count',count)
        if(count >= 0) {
          // 如果大于等于0,说明在可视区内,给图片赋值
          item.setAttribute('src', item.getAttribute('data-url'))
        }
      })
    }
  </script>
</body>
</html>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目的:
  • 核心思路:
  • 代码实现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档