VueCli动态加载图片踩坑,如何使用require(变量)动态获取图片

之前加载静态图片的时候是这么写的

反斜杠的方式,在动态加载图片的时候依然这么写,但是始终加载不出图片,把变量名换乘常量又好了,奇怪了一整天,始终没弄出来,原来是路径的写法问题,动态加载图片的时候需要在路径中加上@符号的方式

  • 使用字符串拼接,实现动态加载图片:require("@/" + src)

看个简单例子就懂了

在template里引用方法getImgUrl():

<div v-for="(item, index) in dataImg" :key="index">
	<img :src="getImgUrl(item.src)"/>
</div>
  • 在method里实现,不使用字符串拼接:
getImgUrl() {
    // src的值是你绝对路径下图片的地址
	return require("@/assets/comic/吾猫当仙.jpg")
}
  • 在method里实现,使用字符串拼接,有多种方式:
// 一个函数只能一个return,为了方便看,就不注释了

getImgUrl(src) {
    // src的值是你绝对路径下图片的地址,此地址需省略开头的 @/ 
    
    // 方法一:此处的src是:assets/comic/吾猫当仙.jpg
    return require("@/" + src);	
    
    // 方法二:此处的src是:comic/吾猫当仙.jpg
    return require("@/assets/" + src);	
    
    // 方法三:此处的src是:吾猫当仙.jpg
    return require("@/assets/comic/" + src);
	
	// 还有方法四,五,六……同理
},

切记!

至少要将 @/ 需要拿出来,如果不拿出来,就无法解析成正确的图片地址!

噢耶!

### Vue2 中实现图片动态加载 在 Vue2 项目中,为了实现图片动态加载,可以采用多种方法。一种常见的方式是通过 JavaScript 的 `require` 函数来引入资源路径,并将其绑定到模板中的 `src` 属性上。 对于 Vue CLI 创建的应用程序,在组件内部可以通过如下方式定义一个函数来进行图片动态加载: ```javascript methods: { getImageSrc(name) { try { return require(`@/assets/images/${name}`); // 假设图片位于 src/assets/images 文件夹下 } catch (error) { console.error('Image not found:', name); return ''; // 或者返回默认图像路径 } } } ``` 此代码片段展示了如何创建一个名为 `getImageSrc` 的方法,该方法接收文件名作为参数并尝试解析对应的模块请求字符串以获取实际的图片地址[^1]。如果指定名称的图片不存在,则捕获异常并可以选择性地提供备用方案。 当使用这个方法时,可以在模板里像这样调用它: ```html <img :src="getImageSrc(imageName)" alt="Dynamic Image"> <!-- imageName 是一个变量或者属性 --> ``` 这种方法利用了 Webpack 对于相对路径和别名的支持特性,使得开发者能够方便地管理静态资产的位置而不必担心部署环境的变化影响最终效果。 另外需要注意的是,上述例子假设所有的图片都存放在项目的 `src/assets/images` 目录之下;如果是其他位置,请相应调整路径前缀部分。 #### 处理异步加载情况下的占位符显示 考虑到网络状况不佳可能导致图片加载缓慢的情况,建议为 `<img>` 标签设置 `loading="lazy"` 属性以及添加合适的占位符样式或内容,从而提升用户体验。例如: ```css <style scoped> .placeholder { width: 100%; height: auto; background-color: lightgray; } .image-loaded img { display: block; } </style> <template> <div class="placeholder" v-if="!imageLoaded"></div> <img @load="onImageLoad" loading="lazy" :class="{ 'image-loaded': imageLoaded }" :src="getImageSrc(imageName)" /> </template> <script> export default { data() { return { imageLoaded: false, imageName: '' // 图片名称 }; }, methods: { onImageLoad(event){ this.imageLoaded = true; }, getImageSrc /* ... */ () } }; </script> ``` 这里增加了两个 CSS 类 `.placeholder` 和 `.image-loaded` 来控制不同状态下元素的表现形式,并监听 `img` 元素上的 `load` 事件以便及时更新视图状态。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值