JavaScript中的图像懒加载实现

首页 / 常见问题 / 低代码开发 / JavaScript中的图像懒加载实现
作者:开发工具 发布时间:10-31 14:03 浏览量:3123
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

图像懒加载是一种提高网页性能的技术,它通过仅加载进入用户视口(viewport)的图像来减少初始页面加载时的资源请求和总体带宽消耗、提高用户体验。详细而言,图像懒加载将非视口内的图像替换为占位符,然后当用户滚动到这些图像时,才会逐步替换为真实图像。这种技术对于含有大量图像的网站尤为有益,例如在线相册或电子商务网站。

一、懒加载技术的原理

懒加载基于一个简单的观察逻辑:用户在任何给定的时间只能看到视口内的内容。因此,只有当用户滚动查看更多内容时,页面其他部分的图像才是需要的。这种方式减缓了页面的初次加载时间,并减少了服务器的负载。

1. 检测图像是否进入视口

首先,必须检测页面上的图像是否已经进入用户的视口范围。有几种方式可以实现这一点。传统上,我们通过监听滚动事件并计算图像相对于视口的位置来判断。在最近的Web APIs中,出现了Intersection Observer API,这是一个用于异步检测目标元素与其祖先元素或顶级文档视口(intersecting)交叉状态的更现代和高效的手段。

2. 加载实际图像

当检测到图像进入视口时,接下来的步骤是加载真正的图像。这通常意味着将图像标签(img)的src属性从占位符图像更改为实际图像的URL。在图像加载完成之后,可以用一些平滑过渡效果来提升用户体验。

二、懒加载的实现方法

实现懒加载可以通过纯JavaScript代码,也可以利用现成的库。无论哪种方法,都应当确保它能在不同的浏览器和设备上稳定工作。

1. 使用Intersection Observer API

Intersection Observer API提供了一种更为简洁和性能更高的方法,来检测元素是否可见。通过构造一个Intersection Observer的实例,并传入两个参数——一个回调函数和一个可选的配置对象——不需要通过监听和处理滚动事件,就可以自动監測目标元素与视口的交叉状态。

let observer = new IntersectionObserver((entries, observer) => {

entries.forEach(entry => {

if (entry.isIntersecting) {

// 防止再次加载

observer.unobserve(entry.target);

// 替换占位符为实际图像

entry.target.src = entry.target.dataset.src;

entry.target.onload = () => {

entry.target.classList.add('loaded'); // 可用于过渡效果

};

}

});

}, {threshold: 0.1}); // threshold表示交叉比例,这里是指至少10%的元素内容进入视口时触发

// 监测页面上的所有懒加载图像

document.querySelectorAll('img[data-lazy]').forEach(img => {

observer.observe(img);

});

2. 基于事件的传统方法

在Intersection Observer API不可用的情况下,可以回退到经典的基于事件的方法。这通常涉及到监听scroll事件,并在每次事件发生时,检查图像是否出现在视口中。

function lazyload() {

const images = document.querySelectorAll('img[data-lazy]');

images.forEach(image => {

const rect = image.getBoundingClientRect();

if (rect.top <= window.innerHeight) {

image.src = image.dataset.src;

image.onload = () => {

image.classList.add('loaded');

};

}

});

}

window.addEventListener('scroll', lazyload);

window.addEventListener('load', lazyload);

三、图像占位符的选择

图像占位符对于懒加载而言至关重要。它们保持了页面的布局稳定,防止了加载真实图像时的页面抖动。

1. 使用基本占位符

一种简单的方法是使用单色或简单图案的轻量级图像作为占位符。这些可以是小尺寸的SVG或数据URL格式的图像。这样的占位符几乎不影响页面加载速度,同时可以给用户一个图像即将出现的视觉提示。

2. 使用模糊占位符

模糊占位符近年来变得流行,大体思路是先展示一张高度压缩并模糊处理的图像作为占位符,然后再加载和渐变到完整的高清图像。这种占位符通过模糊的图像给用户一个内容的预览。

四、处理边缘情况

当实现懒加载时,需要考虑和处理一些边缘情况。

1. 提前加载图像

为了避免用户在滚动到图像位置时出现明显的加载延迟,可以设置一个提前加载的阈值。这样当用户接近图像一定距离时,图像就已经开始加载了。

2. 处理动态内容

对于动态加载的内容(例如无限滚动的网页),需要在新内容插入文档时,更新懒加载的监听器。如果使用Intersection Observer,可以在内容加载后,重新调用observer.observe()来监视新的图像。

五、懒加载对SEO的影响

虽然懒加载对用户体验和性能都有积极影响,但它也可能对SEO(搜索引擎优化)产生影响。搜索引擎蜘蛛可能无法加载或识别未直接包含在源代码中的图像。

1. 使用适当的标记

确保使用符合SEO最佳实践的标记,比如在懒加载图像的img标签上使用noscript元素,为不运行JavaScript的情况下提供一个可被搜索引擎索引的图像版本。

2. 考虑搜索引擎预提取特性

一些搜索引擎,例如谷歌,具备智能预提取(crawl pre-rendering)的功能,能够识别和索引懒加载内容。但是,最好对此进行额外测试,并确保网站的关键内容对搜索引擎是可见的。

结语

通过JavaScript实现图像懒加载,可以大幅提升页面加载性能、提高用户体验,在当今快速的互联网环境中,这变得尤为重要。适当实施懒加载,介绍并熟悉其基础和高级技术,以及了解影响SEO的因素,都是每个前端开发者的宝贵技能。

相关问答FAQs:

1. 为什么在JavaScript中使用图像懒加载?

图像懒加载是为了提高网页的加载速度和性能而采用的一种技术。通过延迟加载图像,只有当图像进入用户视野范围内时才进行加载,可以减少初始加载时间和网络请求的数量,从而提升用户体验。

2. 如何在JavaScript中实现图像懒加载?

实现图像懒加载的核心是监听滚动事件,并判断图像是否进入用户视野范围内。一种常用的方法是使用Intersection Observer API,通过创建一个IntersectionObserver对象来观察目标元素的可见性。

具体步骤包括:首先,获取到所有需要懒加载的图像元素;然后,创建一个IntersectionObserver对象,并设置回调函数;接着,将图像元素加入到IntersectionObserver的观察列表中;最后,在回调函数中判断图像是否进入视野范围,如果是则加载图像。

3. 图像懒加载有哪些注意事项?

在实现图像懒加载时,需要考虑以下几点注意事项:

  • 要确保在前端加载之前在HTML代码中保留图像的占位符,以防止图像加载时页面布局发生变化。
  • 需要给图像元素设置合适的宽度和高度,在图像加载之前,保持其占位符的大小,以避免页面跳动。
  • 对于需要懒加载的图像,可以为它们设置data-src属性来存储真实的图像URL,而不是使用src属性,以便延迟加载图像。
  • 在图像进入用户视野范围内时,需要将data-src属性的值赋给src属性,触发图像加载,这可以通过Intersection Observer的回调函数来实现。
最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

史上最全盘点:一文告诉你低代码(Low-Code)是什么?为什么要用?
-
系统架构师与软件开发者的区别
11-05 13:37
软件开发的发展趋势是什么
11-05 13:37
如何进行软件开发
11-05 13:37
软件开发是一种什么样的体验
11-05 13:37
找软件开发公司需要注意什么
11-05 13:37
软件开发工程师待遇怎么样
11-05 13:37
如何自学软件开发
11-05 13:37
什么软件开发能落地的app
11-05 13:37

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科技中一路大族激光科技中心909室
  • 座机:400-185-5850
  • 手机:137-1379-6908
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2024. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
数字化咨询热线
400-185-5850
申请预约演示
立即与行业专家交流