当前位置:首页 > JavaScript

js实现图片预加载

2026-01-30 10:32:28JavaScript

实现图片预加载的 JavaScript 方法

使用 Image 对象预加载

创建一个 Image 对象并设置其 src 属性,浏览器会自动缓存加载的图片资源。可以通过监听 onloadonerror 事件判断加载状态。

js实现图片预加载

function preloadImage(url) {
  const img = new Image();
  img.src = url;
  img.onload = () => console.log(`Loaded: ${url}`);
  img.onerror = () => console.error(`Failed: ${url}`);
}

// 示例
preloadImage('https://example.com/image.jpg');

批量预加载多张图片

通过数组存储图片 URL,循环调用预加载函数。

const imageUrls = [
  'https://example.com/image1.jpg',
  'https://example.com/image2.png'
];

imageUrls.forEach(url => preloadImage(url));

使用 Promise 优化异步加载

结合 Promise 实现更可控的异步加载逻辑,支持链式调用或 async/await

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

// 示例用法
Promise.all([
  preloadWithPromise('https://example.com/image1.jpg'),
  preloadWithPromise('https://example.com/image2.png')
])
  .then(() => console.log('All images loaded'))
  .catch(err => console.error(`Error loading: ${err}`));

兼容性注意事项

  • 现代浏览器均支持 Image 对象,无需额外兼容处理。
  • 若需支持更早版本(如 IE9 以下),可通过 document.createElement('img') 替代 new Image()

性能优化建议

  • 避免一次性加载过多图片,可分批次或按需加载。
  • 对动态生成的图片 URL,确保先预加载再使用。

js实现图片预加载

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

相关文章

vue实现图片轮播

vue实现图片轮播

Vue 实现图片轮播的方法 使用第三方库(推荐) 安装 vue-awesome-swiper 库,这是基于 Swiper 的 Vue 封装: npm install swiper vue-awes…

vue实现组件循环图片

vue实现组件循环图片

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

vue懒加载实现难吗

vue懒加载实现难吗

Vue懒加载的实现难度 Vue懒加载的实现并不复杂,尤其是借助现代工具和库的支持。懒加载的核心思想是按需加载资源,通常用于路由或组件,以提升页面初始加载速度。以下是常见的实现方法和注意事项:…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('imag…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

h5实现图片压缩

h5实现图片压缩

使用Canvas API压缩图片 HTML5的Canvas API可以通过调整画布尺寸和图像质量来实现图片压缩。创建一个Canvas元素,将图片绘制到Canvas上,再通过toDataURL或toBl…