HTML图片怎么实现懒加载_HTML图片懒加载技术的实现原理和代码

星夢妙者
发布: 2025-09-27 23:40:02
原创
620人浏览过
图片懒加载通过延迟加载非可视区图片提升性能,核心是将真实地址存于data-src中,视口内再赋值src。推荐使用Intersection Observer监听进入视口,兼容老浏览器可用节流+getBoundingClientRect。

html图片怎么实现懒加载_html图片懒加载技术的实现原理和代码

图片懒加载是一种优化网页性能的技术,它能让页面在初始加载时只加载用户可视区域内的图片,其他图片在用户滚动到附近时再动态加载。这种做法能减少初始请求量,加快页面打开速度,节省带宽。

懒加载的实现原理

懒加载的核心思路是:不直接将图片的真实地址写在 src 属性中,而是先放在自定义属性(如 data-src)里。页面加载时,仅加载视口内的图片;当用户向下滚动,图片接近可视区域时,再把 data-src 的值赋给 src,触发图片加载。

判断图片是否进入视口,通常使用以下方法:

  • 通过 getBoundingClientRect() 获取元素相对于视口的位置
  • 结合 scroll 事件监听滚动行为
  • 使用 Intersection Observer API 更高效地监听元素可见性(推荐方式)

使用 Intersection Observer 实现懒加载(现代方案)

Intersection Observer 是浏览器提供的 API,能异步监听元素是否进入视口,性能优于频繁监听 scroll 事件。

立即学习前端免费学习笔记(深入)”;

<img class="lazy" alt="图片1">
<img class="lazy" alt="图片2">
<img class="lazy" alt="图片3">

JavaScript 代码:

图酷AI
图酷AI

下载即用!可以免费使用的AI图像处理工具,致力于为用户提供最先进的AI图像处理技术,让图像编辑变得简单高效。

图酷AI 57
查看详情 图酷AI
const images = document.querySelectorAll('.lazy');

const imageObserver = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      img.classList.remove('lazy');
      imageObserver.unobserve(img);
    }
  });
});

images.forEach(img => {
  imageObserver.observe(img);
});

这段代码会观察所有带有 .lazy 类的图片,一旦进入视口,就将 data-src 赋值给 src,并停止监听该元素。

传统 scroll + getBoundingClientRect 方式(兼容性更好)

如果需要支持较老的浏览器,可以手动监听滚动事件:

window.addEventListener('scroll', function() {
  const imgs = document.querySelectorAll('.lazy');
  const scrollTop = window.pageYOffset;
  const viewportHeight = window.innerHeight;

  imgs.forEach(img => {
    if (img.dataset.src === '') return; // 已加载则跳过

    const rect = img.getBoundingClientRect();
    if (rect.top <= viewportHeight && rect.bottom >= 0) {
      img.src = img.dataset.src;
      img.dataset.src = ''; // 防止重复加载
    }
  });
});

这种方式需要节流优化,避免 scroll 事件频繁触发影响性能:

function throttle(func, delay) {
  let inThrottle;
  return function() {
    if (!inThrottle) {
      func.apply(this, arguments);
      inThrottle = true;
      setTimeout(() => inThrottle = false, delay);
    }
  };
}

window.addEventListener('scroll', throttle(checkImages, 100));

小结与建议

现代项目推荐使用 Intersection Observer 实现懒加载,性能好且代码简洁。对于需要兼容 IE 的场景,可采用节流 + getBoundingClientRect 的方式。同时记得给图片设置固定宽高,避免加载时页面抖动。

基本上就这些,实现起来不复杂但效果明显。

以上就是HTML图片怎么实现懒加载_HTML图片懒加载技术的实现原理和代码的详细内容,更多请关注php中文网其它相关文章!

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号