js-图片懒加载的实现

2 篇文章 0 订阅
订阅专栏

目录

1.什么是图片懒加载

2.懒加载的优点

3.如何实现图片懒加载


1.什么是图片懒加载

 指当页面加载数据时,只先加载浏览器可视区的图片,而不是直接加载页面中所有图片。只有当鼠标滚轮往下滑,才加载后面的图片。


2.懒加载的优点

使用图片懒加载可以优化页面的渲染速度,减少图片的加载时间以及加载体积(因为你不用等所有的图片都加载好,只需要当前可视区要用到的图片加载好即可,减少服务器发送请求获取图片信息的次数)。同时可以为客户节省流量。


3.如何实现图片懒加载

  • 第一种最简单直接的方式便是监听 scroll 事件,当图片到浏览器顶部的距离小于浏览器可视窗口的高度时,加载图片 

     (document.getBoundingClientRect().top < window.innerHeight)

具体做法:先将在 <img /> 标签中自定义一个属性 data-src ,放实际图片的地址,等需要加载图片的时候再将 data-src 中的值,赋值给 src 属性。

<img data-src="src/views/images/1.jpg" />

:Vue 项目中要 img 的 src 属性的路径要写完整,从脚手架 src 文件夹一级一级往下写,因为后续改完路径之后服务器是直接拼接上地址渲染的,不会识别 ' ./ ' 具体指的是哪个路径) 

完整代码

<img data-src="src/views/images/1.jpg" /><br />
<img data-src="/src/views/images/2.jpg" /><br />
<img data-src="/src/views/images/3.jpg" /><br />
<script>
    const imgs = document.querySelectorAll("img");
    window.addEventListener('scroll',()=>{
        imgs.forEach(img => {
            if(img.getBoundingClientRect().top < window.innerHeight) {
                const data_src = img.getAttribute('data-src');
                img.setAttribute('src',data_src);
                console.log('触发');      // 测试触发次数
            }
        })
    })
</script>

这个方法虽然简单,但弊端也有,每次拖动滚动条,只要图片是在可视窗口内都会触发,但实际上只要是加载过的图片,只需要加载一次就好了,这样无疑是增加了服务器的请求数量。由此引出第二个优化方法。


  •  第二个方法是使用浏览器提供的构造函数 IntersectionObserver (交叉观察)

目标元素和可视窗口之间的产生交叉区域(也就是目标元素出现在可视区域时),交叉区域的出现和消失会调用 IntersectionObserver 的回调函数

  1. 首先实例化一个 IntersectionObserver 对象 ob
  2. 当需要观察目标元素是否进入或退出可视区时,调用 ob 对象的 observe 方法,当不需要观察时调用 ob.unobserve 方法。
  3. 这样我们在图片第一次加载后就可以停止观察了,就不会造成反复观察反复加载。
const ob = new IntersectionObserver(function callback(changes){});

// 观察元素
ob.observe(element);

// 不观察元素
ob.unobserve(element);

callback 回调函数有一个参数(changes)是数组,每个成员都是一个 IntersectionObserverEntry 对象。举例来说,如果同时有两个被观察的对象的可见性发生变化,changes 数组就会有两个成员。

循环遍历参数 changes 中每一个成员,当该成员的 isIntersecting = true 则说明该回调函数所属的目标元素已经出现,将目标元素 img 的真正路径赋值,加载渲染图片。只要目标元素出现过一次已经渲染过了,就可以停止观察了,避免重复加载。

完整代码

const imgs = document.querySelectorAll("img");

const observer = new IntersectionObserver(callback);   // 实例化

function callback(entries) {
  // 循环遍历回调函数中每一个成员
  entries.forEach((entry) => {
    if (entry.isIntersecting) {
      const image = entry.target;       // 提取回调函数所属的目标元素
      const data_src = image.getAttribute("data-src");
      image.setAttribute("src", data_src);   // 修改回调函数所属的目标元素 img 标签的 src
      observer.unobserve(image);       // 关闭目标元素的观察
      console.log('触发');         // 测试触发次数
    }
  });
}

imgs.forEach((img) => {     // 循环所有 img 标签,观察每个 img 标签
  observer.observe(img);
});

测试结果:三张图片只会触发三次,达到预期

js实现图片懒加载效果
10-19
主要为大家详细介绍了js实现图片懒加载效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
js图片懒加载插件
02-10
好用的图片懒加载
不到20行js实现高性能图片懒加载
最新发布
我本可以容忍阳光,如果我不曾见过太阳,然而阳光已使我荒凉,成为更新的荒凉。
07-31 86
什么是懒加载相信大家都知道,一句话概括,就是当需要出现的时候再加载。当页面上有很多图片(即:有很多img标签)的时候,浏览器会依次执行get请求拿到每个图片的二进制流,这实际上是在消耗用户的流量和服务器带宽。而不管是pc设备还是移动端设备,屏幕大小总是有限的,无法一次性看到所有图片,那么看不到的图片就没必要加载,等滚动屏幕,img元素进入浏览器可视区域时再加载。基本原理那如何做到这一点呢?我们知道...
js---《实现图片的懒加载》
AAAXEC的博客
11-09 1157
定义:当打开一个有很多图片的页面时,先只加载页面上看到的图片,等滚动到页面下面时,再加载所需的图片。这就是图片懒加载。作用: 减少或延迟请求数,缓解浏览器的压力,增强用户体验 如何实现: 1.设置图片src属性为同一张图片,同时自定义一个data-src属性来存储图片的真实地址 2.页面初始化显示的时候或者浏览器发生滚动的时候判断图片是否在视野中 3.当图片在视野中时,通过js自动改变该区域的图片的src属性为真实地址
JS实现图片的懒加载
webchang的博客
04-15 4353
图片的懒加载
js实现图片懒加载
Bright2017的博客
02-06 407
最近复习下js、简单实现一下图片的懒加载 思路其实很简单: 页面的img默认加载一张lodaing图片、速度会快一点、其他图片当显示在当前窗口的时候再获取data-src属性的值设置 到图片的src属性当中加载图片。 Demo:http://www.bright2017.top/test1/test1-32/ &lt;!DOCTYPE html&gt; &lt;html&gt; &l...
JS图片懒加载
Grand.的博客
04-06 407
JS图片懒加载
js代码-图片懒加载
07-16
**JavaScript 图片懒加载技术详解** ...通过以上介绍,我们可以理解JavaScript图片懒加载的核心原理和实现方式,以及如何在实际项目中应用和优化这一技术。通过合理运用,可以显著提升网页性能,提供更好的用户体验。
原生JS实现图片懒加载之页面性能优化
10-17
原生js实现图片懒加载 *{ margin: 0; padding: 0; box-sizing: border-box; } ul{ overflow: hidden; list-style: none; } li{ float: left; width: 50%; height: 200px; padding: 10px; } li img{ display: ...
11-图片懒加载.md
03-31
在本次面试题中,考察的是候选人对于图片懒加载功能的设计和实现能力,这也反映了在实际工作中对于前端性能优化的重视。 ## 图片懒加载的设计要点 ### 1. 使用data-src或data-original属性 为了实现图片的懒加载...
js图片懒加载
qq_42450901的博客
08-19 262
Document *{ margin: 0;padding:0;list-style: none; } ul{ overflow: hidden; width: 800px; margin:0 auto; } li{ w...
JS 实现图片懒加载
wu_2004的博客
10-13 279
在HTML中,为要进行懒加载的图片元素添加一个占位符,通常是一个小尺寸的透明图片或者一个简单的`<div>`元素。- 为每个要懒加载的图片元素添加一个自定义数据属性,例如`data-src`,用于存储原始图片的`src`属性的值。实现图片懒加载的思路是延迟加载页面中的图片,只有当用户滚动到图片可见区域时才加载图片,以减少初始页面加载时间和网络带宽的使用。- 当图片进入可见区域时,通过JavaScript将`data-src`属性的值设置为`src`属性,从而加载原始图片。这会触发浏览器下载图片。
js实现图片懒加载
liuli0927的博客
08-26 246
js实现图片懒加载
js实现图片的懒加载
weixin_45966674的博客
03-11 479
前端js实现页面图片懒加载 前端技术发展至今,我们对性能的追求不断提升,不断变化的是技术,但我们对用户体验的极致追求却始终如一。 所有前端(特别是soe除了类)都会因图片的加载而发愁,图片作为巨大的请求信息类,用时巨大。 那我们该如何处理呢? 这就涉及到了图片懒加载 所谓懒加载其实就是一种视觉欺骗 我们先去掉所有图片的src 将其改成 data-src <img data-src = "images/case/Exhibition.png"/> 因为没有src属性存在 页面就不会发送异
图片懒加载JS
weixin_44178497的博客
02-05 280
懒加载
js如何实现图片的懒加载
A_hapiness的博客
07-06 1624
前端js实现图片的懒加载 缓解长页面多图片下的压力
JavaScript:原生JS实现图片懒加载
热门推荐
郭宇的博客
06-12 1万+
懒加载 用户体验 优化
跨平台通用的JavaScript图片懒加载技术
3. PC端和移动端通用的图片懒加载实现:要实现PC端和移动端通用的图片懒加载,需要考虑到不同设备和浏览器的兼容性问题。可以通过监听滚动事件,判断图片是否进入可视区域,然后进行加载。在移动端还需要考虑到触摸...
21
原创
147
点赞
215
收藏
35
粉丝
关注
私信
写文章

热门文章

  • Git 连接问题:fatal: unable to access ‘https://github.com/...../‘: Failed to connect to git 40160
  • Vue3 组件封装——文件上传 6138
  • HTML: require is not defined 报错解决 3519
  • TypeScript 报错 for (let i = startIndex ?? 0; i < array.length; i++) SyntaxError: Unexpected token ‘?‘ 2138
  • JS小技巧——随机数的生成 1280

分类专栏

  • 红宝书系列 3篇
  • js 2篇

最新评论

  • Git 连接问题:fatal: unable to access ‘https://github.com/...../‘: Failed to connect to git

    lubxx: 方法二解决,牛

  • webpack5 webpack-dev-server不会自动刷新页面

    1H1R1M: 为啥我配置了watchfiles还是不会自动刷新

  • Git 连接问题:fatal: unable to access ‘https://github.com/...../‘: Failed to connect to git

    下岗鹦鹉再就业: 方法二解决,牛批

  • Git 连接问题:fatal: unable to access ‘https://github.com/...../‘: Failed to connect to git

    Phy_DE: 方式二解决,感谢

  • Git 连接问题:fatal: unable to access ‘https://github.com/...../‘: Failed to connect to git

    John_Woo_: 唯一真神

最新文章

  • js 扁平化数组
  • vscode 报错——你的意思是要将 “moduleResolution“ 选项设置为 “node“,还是要将别名添加到 “paths“ 选项中?
  • 力扣刷题之——摩尔投票法
2024年4篇
2023年16篇
2022年1篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳坪山网站建设公司商丘百度快照网站优化如何优化企业网站关键词优化网站 百度无法收录海外网站seo优化网站快照优化找金手指汽车网站优化实用的企业网站优化技巧怎么做新网站优化郴州优化网站排名河南网站优化郑州网站搭建方案xx网站的优化毕业设计岳阳网站搜索优化多少钱潮州网站优化推广代运营eo网站关键词优化是什么上虞网站优化公司深圳网站优化运营公司网站关键词怎么优化桂林网站关键字优化优化网站就选c火10星优化网站问题的方案罗湖自己网站优化方案网站优化原理商洛网站优化哪家公司好昆明如何优化网站东莞网站关键词优化哪家好家居行业网站优化获客天津效果好的网站优化方案怎样建设的网站好优化好排名武清区网络优化网站麻涌家具网站优化哪家公司好香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化