Vue使用new Image()实现图片预加载功能

 更新时间:2024年11月28日 09:51:10   作者:不爱说话郭德纲  
这篇文章主要介绍了如何在 Vue 中实现图片预加载的一个简单小demo以及优化方案,文中通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

在 Vue 中实现图片预加载

1. 创建一个 Vue 组件

我们将创建一个 Vue 组件,并在其中使用 created 生命周期钩子来预加载图片。这里使用 new Image() 的方式来预加载图片。

2. 示例代码

<template>
  <div>
    <!-- 显示的图片 -->
    <img :src="image1Src" alt="Image 1" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 绑定到页面上的图片路径
      image1Src: "img1.png",
    };
  },
  created() {
    this.preloadImage(this.image1Src); // 预加载图片
  },
  methods: {
    // 预加载图片的方法
    preloadImage(src) {
      const img = new Image(); 
      img.src = src;        
      img.onload = () => {
        console.log('Image loaded:', src); // 图片加载完成后的回调
      };
      img.onerror = () => {
        console.error('Failed to load image:', src); // 图片加载失败的回调
      };
    }
  }
};
</script>

代码解析

当你设置 img.src = src 时,浏览器会开始按照提供的 src 路径去加载图片资源。这个过程包括:

  • 请求:浏览器向服务器发送请求,获取图片文件。
  • 加载:图片文件从服务器下载到浏览器的缓存。
  • 渲染:浏览器在需要显示图片时,从缓存中加载并渲染它。

扩展:在 Vue 中预加载大量图片

如果你需要预加载大量图片,可以通过数组和循环来实现:

export default {
  data() {
    return {
      images: [
        'https://img1.png',
        'https://img1.png',
        'https://img2.png',
        // 其他图片路径
      ]
    };
  },
 created() {
     this.preLoadimg()
 },
 methods: {
      preLoadimg() {
        let count = 0;
        for (let img of this.imgs) {
          let image = new Image();
          image.src = img;
          if (image.complete) {
            console.log('图片已经在缓存中');
            count++;
            if (count === this.imgs.length) {
              console.log('全部加载完成');
            }
          } else {
            image.onload = () => {
              count++;
              if (count === this.imgs.length) {
                console.log('全部加载完成');
              }
            };
          }
        }
      }
    }
};

优点

  • 通过 Vue 组件的生命周期钩子来管理图片预加载,避免影响页面渲染。
  • 使用 new Image() 创建的图片对象不会直接渲染到页面上,因此不会影响页面布局。
  • 可以在组件创建时自动进行图片预加载,提升用户体验。

优化建议

当图片数量较多时,一次性预加载所有图片可能会影响性能,特别是对于移动设备或网络条件较差的用户。因此,可以结合懒加载(Lazy Loading)来提升用户体验。懒加载可以在图片进入视口(viewport)时才进行加载,从而提高初始页面加载速度和用户体验。

  • 懒加载实现

    • 使用loading="lazy"

    • 或者通过以下步骤来实现图片的懒加载:

      安装依赖:使用 Intersection Observer API 来检测图片是否进入视口。Vue 也有专门的懒加载库,如 vue-lazyload

      修改组件:在组件中使用懒加载逻辑。

总结

在 Vue 中实现图片预加载是一个简单而高效的过程,通常会通过生命周期钩子函数(如 created)来管理。你可以使用 new Image() 创建图片对象,设置其 src 属性来实现图片的预加载,减少后续访问时的等待时间。具体实现根据自己项目来写。

以上就是Vue使用new Image()实现图片预加载功能的详细内容,更多关于Vue new Image()图片预加载的资料请关注脚本之家其它相关文章!

相关文章

  • vue el-input输入框输入不了的解决方法

    vue el-input输入框输入不了的解决方法

    在工作中遇到N次input无法输入的问题,所以下面这篇文章主要给大家介绍了关于vue el-input输入框输入不了的解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • vue 3 中watch 和watchEffect 的新用法

    vue 3 中watch 和watchEffect 的新用法

    本篇文章主要通过 Options API 和 Composition API 对比 watch 的使用方法,让大家快速掌握 vue3 中 watch 新用法,需要的朋友可以参考一下哦,希望对大家有所帮助
    2021-11-11
  • vue移动端下拉刷新和上滑加载

    vue移动端下拉刷新和上滑加载

    这篇文章主要为大家详细介绍了vue移动端下拉刷新和上滑加载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • 详解vue数据渲染出现闪烁问题

    详解vue数据渲染出现闪烁问题

    本篇文章主要介绍了vue数据渲染出现闪烁问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 基于Vue的商品主图放大镜方案详解

    基于Vue的商品主图放大镜方案详解

    这篇文章主要介绍了基于 Vue 的商品主图放大镜方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Vue中组件(Component)和插件(Plugin)的区别及说明

    Vue中组件(Component)和插件(Plugin)的区别及说明

    这篇文章主要介绍了Vue中组件(Component)和插件(Plugin)的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Vue中render方法的使用详解

    Vue中render方法的使用详解

    这篇文章主要为大家详细介绍了Vue中render方法的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Vue动态实现评分效果

    Vue动态实现评分效果

    这篇文章主要为大家详细介绍了Vue动态实现评分效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • vue项目打包后浏览器缓存问题及解决

    vue项目打包后浏览器缓存问题及解决

    这篇文章主要介绍了vue项目打包后浏览器缓存问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Vue项目中解决数字精度丢失问题

    Vue项目中解决数字精度丢失问题

    我们知道,浮点类型的数据,在计算机中是以二进制的方式存储的,但是表示的数据也有个上限和下限,当超过限制 ,在计算机上显示只能取最接近的限值, 数字解析精度丢失说的就是这个现象,所以本文给大家介绍了Vue项目中解决数字精度丢失问题的解决,需要的朋友可以参考下
    2024-02-02

最新评论