新闻中心

J*aScript实现图片懒加载的三种方式_j*ascript性能优化

2025-11-20
浏览次数:
返回列表
答案:J*aScript实现图片懒加载有三种方式:1. 使用getBoundingClientRect结合scroll事件和防抖检测元素位置;2. 使用Intersection Observer API异步监听元素进入视口,性能更优;3. 通过scroll事件结合offsetTop判断图片是否可见,需注意布局变化影响。推荐优先使用Intersection Observer。

javascript实现图片懒加载的三种方式_javascript性能优化

图片懒加载是一种提升网页性能的常用技术,尤其在包含大量图片的页面中效果显著。它通过延迟加载非首屏图片,减少初始请求资源大小,加快页面渲染速度,优化用户体验。以下是 J*aScript 实现图片懒加载的三种常见方式。

1. 使用 getBoundingClientRect 判断元素是否进入视口

这种方式通过定时检测图片元素与浏览器视口的位置关系,判断其是否出现在可视区域内,从而决定是否加载真实图片。

实现思路:

  • 将图片的真实地址存放在 data-src 属性中,src 先为空或占位图。
  • 监听页面的 scroll 事件(可配合防抖优化性能)。
  • 遍历所有未加载的图片,使用 getBoundingClientRect() 获取其位置信息。
  • 如果图片的 top 值小于可视区域高度,则开始加载图片。

示例代码:

网趣网上购物系统HTML静态版 网趣网上购物系统HTML静态版

网趣购物系统静态版支持网站一键静态生成,采用动态进度条模式生成静态,生成过程更加清晰明确,商品管理上增加淘宝数据包导入功能,与淘宝数据同步更新!采用领先的AJAX+XML相融技术,速度更快更高效!系统进行了大量的实用性更新,如优化核心算法、增加商品图片批量上传、谷歌地图浏览插入等,静态版独特的生成算法技术使静态生成过程可随意掌控,从而可以大大减轻服务器的负担,结合多种强大的SEO优化方式于一体,使

网趣网上购物系统HTML静态版 0 查看详情 网趣网上购物系统HTML静态版
const images = document.querySelectorAll('img[data-src]');

function loadImage() {
  images.forEach(img => {
    const rect = img.getBoundingClientRect();
    if (rect.top < window.innerHeight && !img.src) {
      img.src = img.dataset.src;
    }
  });
}

// 防抖处理
let timer;
window.addEventListener('scroll', () => {
  if (timer) clearTimeout(timer);
  timer = setTimeout(loadImage, 100);
});

// 初始化调用一次
loadImage();

2. 使用 Intersection Observer API(推荐)

这是现代浏览器推荐的方式,无需手动计算位置,性能更优,代码更简洁。

Intersection Observer 可以异步监听目标元素与视口的交叉状态,当图片进入视口时触发回调。

  • 创建一个观察器实例,设置回调函数。
  • 将每张待加载图片作为目标传入观察器。
  • 一旦图片进入视口,加载真实图片并停止观察。

示例代码:

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

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      observer.unobserve(img); // 加载后取消监听
    }
  });
});

images.forEach(img => observer.observe(img));

优点:无需频繁监听 scroll,由浏览器优化调度,性能更好。

3. 使用 scroll + offsetTop 判断位置

这是一种较传统的方法,通过比较图片距离页面顶部的偏移量和当前滚动位置来判断是否可见。

  • 获取图片的 offsetTop(相对于文档顶部的位置)。
  • 结合 window.innerHeightwindow.pageYOffset 计算是否进入视口。
  • 同样建议加防抖避免频繁触发。

示例代码:

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

function checkVisible() {
  const windowHeight = window.innerHeight;
  const scrollTop = window.pageYOffset;

  images.forEach(img => {
    if (!img.src && img.offsetTop <= windowHeight + scrollTop) {
      img.src = img.dataset.src;
    }
  });
}

window.addEventListener('scroll', debounce(checkVisible, 150));

function debounce(func, delay) {
  let timeout;
  return function() {
    const context = this, args = arguments;
    clearTimeout(timeout);
    timeout = setTimeout(() => func.apply(context, args), delay);
  };
}

注意:offsetTop 不会实时更新布局变化,若页面结构动态变化需谨慎使用。

基本上就这些。三种方式中,Intersection Observer 是最推荐的现代方案,兼容性良好(IE 不支持,需考虑 polyfill)。前两种适合大多数场景,第三种适合低版本环境兼容。选择合适的方法能有效提升页面加载速度和用户体验。

以上就是J*aScript实现图片懒加载的三种方式_j*ascript性能优化的详细内容,更多请关注其它相关文章!


# 网上  # 浙江seo是什么细节  # 鼓楼区运营网站推广优势  # 企业自媒体推广营销策略  # 房产营销推广渠道获客  # 网站推广是如何收费的呀  # 网站推广特出云速捷声誉  # 公众号关键词回复 排名  # 直播网站怎么引流推广赚钱  # 昌吉抖音关键词搜索排名  # 网店营销推广策略步骤  # 这是  # 如何处理  # 淘宝  # javascript  # 防抖  # 如何实现  # 购物系统  # 三种  # 回调  # 加载  # 延迟加载  # win  # 懒加载  # 回调函数  # app  # 浏览器  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  《GTA6》开发画面疑似泄露!这次可不是AI了  AO3官网镜像链接 Archive of Our Own同人文在线浏览  C++如何实现异步操作_C++11使用std::future和std::async进行异步编程  J*a递归快速排序中静态变量的状态管理与陷阱  Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法  照顾宝贝2小游戏免费秒玩入口  J*aScript:在map操作中高效处理空数组  天猫2025双十一0点秒杀攻略 天猫爆款抢购时间  windows10怎么关闭系统提示音_windows10彻底静音设置方法  Golang并发任务中错误如何聚合_Golang goroutine error收集方式  红果短剧网页版官网入口 官方最新网址发布  谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】  漫蛙官网正版漫画入口 漫蛙2官方网页登录地址  狙击外星人小游戏开始_狙击外星人小游戏立即开始  抖音网页版怎么|直播|_抖音网页版开播操作指南  Yandex免登录网页版地址 Yandex搜索引擎官方访问入口  AO3访问入口汇总 AO3网页版同人作品一键直达  小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍  NetBeans Ant项目:自动化将资源文件复制到dist目录的教程  海量存储:机器视觉智能化的核心基石  composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?  lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法  Discord Slash 命令响应超时问题的异步解决方案  在FastAPI中利用lifespan与依赖注入高效管理Redis连接池  Go语言HTML解析:利用Goquery精准获取指定元素内容  《马克思佩恩3》早期版本曝光 UI设计曾多次调整!  Tabulator表格中精确实现日期时间排序的指南  葱吃多了会怎样 葱吃多了会伤胃吗  python3时间如何用calendar输出?  html5 app怎么运行环境_配html5 app运行环境【教程】  如何在CSS中使用浮动制作导航栏_float实现水平菜单  Go RPC HTTP服务正确实现与常见陷阱解析  抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩  CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略  淘宝支付提示失败如何解决 淘宝支付流程优化方法  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版  处理动态列数据:J*a ArrayList的正确初始化与字符累加教程  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  将HTML动态表格多行数据保存到Google Sheet的教程  J*aScript map 迭代中检测空数组元素的有效方法  Python多线程中正确使用sigwait处理SIGALRM信号  如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略  J*aScript设计模式实践_j*ascript代码优化  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南  BetterDiscord插件中安全更新用户简介的实践指南  qq游戏手机版下载安装_qq游戏移动端入口  MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具 

搜索