当前位置:首页 > JavaScript

js实现图片预加载

2026-04-04 02:09:17JavaScript

图片预加载的实现方法

图片预加载是提高网页性能的重要手段,通过提前加载图片资源,减少用户等待时间。以下是几种常见的实现方式:

使用Image对象

创建Image对象并设置src属性,浏览器会自动加载图片但不插入DOM。

const preloadImages = (urls) => {
  urls.forEach(url => {
    const img = new Image();
    img.src = url;
  });
};

// 使用示例
preloadImages([
  'image1.jpg',
  'image2.png',
  'image3.webp'
]);

利用CSS隐藏预加载

将图片插入DOM但隐藏显示,适用于少量关键图片。

function preloadWithCSS(urls) {
  const container = document.createElement('div');
  container.style.display = 'none';
  document.body.appendChild(container);

  urls.forEach(url => {
    const img = document.createElement('img');
    img.src = url;
    container.appendChild(img);
  });
}

使用Promise实现异步预加载

通过Promise.all可以监控所有图片加载完成状态。

const preloadWithPromise = (urls) => {
  return Promise.all(urls.map(url => {
    return new Promise((resolve, reject) => {
      const img = new Image();
      img.onload = () => resolve(url);
      img.onerror = () => reject(url);
      img.src = url;
    });
  }));
};

// 使用示例
preloadWithPromise(['img1.jpg', 'img2.jpg'])
  .then(() => console.log('全部加载完成'))
  .catch(err => console.log('加载失败:', err));

结合懒加载的实现

对于长页面可以只预加载首屏内容,其他图片按需加载。

const lazyPreload = (selector = 'img[data-src]') => {
  const io = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        const img = entry.target;
        img.src = img.dataset.src;
        io.unobserve(img);
      }
    });
  });

  document.querySelectorAll(selector).forEach(img => {
    io.observe(img);
  });
};

性能优化建议

预加载数量不宜过多,建议控制在10个以内 对重复调用的预加载应该做缓存处理 WebP格式通常比JPEG/PNG体积更小 考虑使用loading="lazy"原生属性作为降级方案

js实现图片预加载

<img src="placeholder.jpg" data-src="real-image.jpg" loading="lazy">

以上方法可根据实际场景组合使用,建议优先考虑Promise方案配合IntersectionObserver实现最佳性能。

标签: 加载图片
分享给朋友:

相关文章

vue实现组件循环图片

vue实现组件循环图片

Vue 实现组件循环图片的方法 在 Vue 中实现组件循环图片通常可以通过 v-for 指令结合动态数据绑定完成。以下是几种常见的实现方式: 使用静态图片路径数组 假设有一组本地图片路径,可以通过数…

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 在模板中通过 v-if 或 v-show 控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,而 v-show 仅…

jquery图片

jquery图片

jQuery 图片操作 jQuery 提供了多种方法来处理图片,包括加载、显示、隐藏、动画效果等。以下是一些常见的 jQuery 图片操作方法: 动态加载图片 使用 jQuery 的 attr()…

H5图片实现地图

H5图片实现地图

实现H5图片地图的方法 在H5中实现图片地图功能,可以通过以下方式完成。图片地图允许用户在图片的特定区域点击,触发不同的交互效果。 使用HTML的<map>和<area>标签…

react如何引入图片

react如何引入图片

在React中引入图片的方法 使用import直接引入 将图片文件放在项目src目录下(如src/images),通过ES6的import语法引入: import logo from './imag…

vue实现无线加载

vue实现无线加载

无限滚动加载的实现 在Vue中实现无限滚动加载(Infinite Scroll)可以通过监听滚动事件或使用现成的库完成。以下是两种常见方法: 使用原生滚动事件监听 通过监听滚动事件判断是否到达页面底…