关于如何实现图片懒加载

简介: 关于如何实现图片懒加载

图片懒加载的原理:

       通过延迟加载图片,只有当图片即将进入可视区域时再进行加载,以优化网页加载速度和性能。

具体的实现步骤如下:

将待加载的图片的 src 属性设置为空或者一个占位符,而不是真实的图片链接。

监听页面滚动事件或者其他触发条件,比如图片容器进入可视区域。

当触发条件满足时,获取到所有需要进行懒加载的图片元素。

遍历这些图片元素,将之前设置的空或占位符 src 属性替换为真实的图片链接。

图片开始加载并显示在页面上。

通过这种方式,可以避免一次性加载大量图片,提高页面的加载速度。同时,在用户滚动页面时,可以按需加载图片,减少不必要的网络请求和资源浪费。

<img class="lazy" data-src="image.jpg" src="placeholder.jpg">
// 获取所有具有.lazy类的图片元素
const lazyImages = document.querySelectorAll('.lazy');
// 监听滚动事件
window.addEventListener('scroll', lazyLoad);
function lazyLoad() {
  // 遍历每个需要进行懒加载的图片
  for (const lazyImage of lazyImages) {
    if (elementInViewport(lazyImage)) {
      // 将data-src属性的值赋值给src属性,触发图片加载
      lazyImage.src = lazyImage.dataset.src;
      // 移除.lazy类,避免重复加载
      lazyImage.classList.remove('lazy');
    }
  }
}
function elementInViewport(element) {
  const rect = element.getBoundingClientRect();
  return (
    rect.top >= 0 &&
    rect.left >= 0 &&
    rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
    rect.right <= (window.innerWidth || document.documentElement.clientWidth)
  );
}

通过获取具有.lazy类的图片元素集合,并使用scroll事件监听用户滚动行为。当图片进入可视区域时,将data-src属性的值赋给src属性,触发图片加载。

相关文章
|
前端开发 JavaScript UED
过渡效果的艺术:CSS transition 让网页交互更平滑(上)
过渡效果的艺术:CSS transition 让网页交互更平滑(上)
|
6月前
|
Python 存储 自然语言处理
Langchain 和 RAG 最佳实践
这是一篇关于LangChain和RAG的快速入门文章,主要参考了由Harrison Chase和Andrew Ng讲授的​​Langchain chat with your data​​​课程。你可以在​​rag101仓库​​​中查看完整代码。本文翻译自我的英文博客,最新修订内容可随时参考:​​LangChain 与 RAG 最佳实践​​。
248 4
Langchain 和 RAG 最佳实践
|
开发工具 git
Jupyter Lab操作文档
**Jupyter Lab 概览:**集成编辑器、终端和自定义组件的环境。可定制主题、显示行号、切换语言。使用时,了解界面布局,通过`Ctrl+Enter`运行代码,`Shift+Enter`前进,`Alt+Enter`新建行。利用Markdown写作,通过Terminal执行命令,用快捷键提升效率,如`a/b`增删单元格,`m/y`切换模式。文件上传下载可使用OBS或终端工具。
Jupyter Lab操作文档
在 Vue3 + ElementPlus 项目中使用 el-autocomplete 控件
本文介绍了在Vue3 + ElementPlus项目中如何使用`el-autocomplete`控件实现自动补全输入功能,并探讨了不同版本ElementPlus中`clearable`属性的兼容性问题。
1175 0
在 Vue3 + ElementPlus 项目中使用 el-autocomplete 控件
|
12月前
|
存储 缓存 Java
在Spring Boot中使用缓存的技术解析
通过利用Spring Boot中的缓存支持,开发者可以轻松地实现高效和可扩展的缓存策略,进而提升应用的性能和用户体验。Spring Boot的声明式缓存抽象和对多种缓存技术的支持,使得集成和使用缓存变得前所未有的简单。无论是在开发新应用还是优化现有应用,合理地使用缓存都是提高性能的有效手段。
232 1
|
Shell Linux 网络安全
【Python】已完美解决:(pip提示升级)WARNING: There was an error checking the latest version of pip.,
【Python】已完美解决:(pip提示升级)WARNING: There was an error checking the latest version of pip.,
2302 0
|
JavaScript Linux Windows
【应用服务 App Service】NodeJS +Egg 发布到App Service时遇见 [ERR_SYSTEM_ERROR]: A system error occurred:uv_os_get_passwd returned ENOENT(no such file or directory)
【应用服务 App Service】NodeJS +Egg 发布到App Service时遇见 [ERR_SYSTEM_ERROR]: A system error occurred:uv_os_get_passwd returned ENOENT(no such file or directory)
308 0
Centos8 Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:
Centos8 Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:
447 1
搜索和替换PPT里面指定字体文字的(某些字体无法随演示文稿一起保存)解决方案
搜索和替换PPT里面指定字体文字的(某些字体无法随演示文稿一起保存)解决方案
277 0