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


答案: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 值小于可视区域高度,则开始加载图片。

示例代码:

科威旅游管理系统源码 科威旅游管理系统源码

系统前端采用可视化布局,能自动适应不同尺寸屏幕,一起建站,不同设备使用,免去兼容性烦恼。系统提供列表、表格、地图三种列表显示方式,让用户以最快的速度找到所需行程,大幅提高效率。系统可设置推荐、优惠行程,可将相应行程高亮显示,对重点行程有效推广,可实现网站盈利。系统支持中文、英文,您还可以在后台添加新的语言,关键字单独列出,在后台即可快速翻译。

科威旅游管理系统源码 150 查看详情 科威旅游管理系统源码
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.innerHeight 和 window.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性能优化的详细内容,更多请关注其它相关文章!


# java  # seo营销干货  # 韩国官方网站推广怎么做  # seo站怎么玩  # 上海正规网站建设检修  # seo加盟骗局  # 阆中网站怎么优化  # seo推广公司如何收费标准  # 太原解读网站建设  # 淄博网络营销推广联系人  # 是一种  # 这是  # 文件上传  # 如何用  # 数据结构  # 防抖  # 管理系统  # 回调  # 三种  # 加载  # 延迟加载  # win  # 懒加载  # 回调函数  # app  # 浏览器  # javascript  # 新钥匙石家庄网站建设 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 《健康大兴》注册方法介绍  WPS长文档分栏排版不乱方法_WPS分栏+分节符报纸排版教程  J*aScript实现网页表单实时输入字段比较与验证教程  抖音商城官网是什么_抖音商城官方网址与访问方法  《tt语音》超级玩家开通方法  PHP odbc_fetch_array 返回值处理:如何正确访问嵌套数组元素  创建快捷方式启动系统保护  Symfony路由参数转换器:实体存在性验证与错误处理策略  windows10怎么关闭自动安装应用_windows10禁止推广应用下载  苹果iPhone14ProMax如何新建AppleID_iPhone14ProMax新建AppleID具体流程  J*a实现任务清单管理_集合框架综合入门练手  创建您的便携版VS Code:让配置随身携带  抄漫画官网防走失地址_抄漫画最新漫画完整版阅读入口  虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画  构建可配置的J*aScript加权点击计数器与共享总计功能  包子漫画官网链接官方地址 包子漫画在线观看官网首页入口  Python项目中的条件导入:解决跨模块依赖问题  C#解析并修改XML后保存 如何确保格式与编码的正确性  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置  荣耀盒子应用管理技巧  暴风影音官网正式版_暴风影音手机版官网下载安卓  Mac怎么关闭按键声音_Mac键盘打字音效设置  126手机126邮箱登录_126邮箱手机登录入口官网  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  《腾讯相册管家》注销账号方法  qq邮箱格式填写示例 qq邮箱标准填写规范  如何用Golang优化微服务间请求性能_Golang 微服务请求性能优化方法  mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  抖音网页版官方链接 抖音网页版官网链接入口  毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明  批改网官网首页登录 批改网学生用户登录入口  TikTok网页版入口快速访问 TikTok官网账号登录方法  Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案  VS Code源代码管理(SCM)视图的进阶使用技巧  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  《偃武》甘宁技能详解  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  qq邮箱怎么注册_QQ邮箱注册步骤与注意事项  顺丰速运官网查询入口 顺丰物流查询官网入口链接  铁路12306座位怎么选_12306官方选座操作方法  荣耀Magic7拍照夜景噪点处理_荣耀Magic7相机优化  Yandex世界探索 最新官方免登录入口全知道  虫虫漫画排行榜单入口_虫虫漫画编辑推荐入口  《杖剑传说》食谱大全  路由器DNS怎么设置最快 优化DNS提升上网速度教程  Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解  Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程  使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留 

 2025-11-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.