【Vue3】图片未加载成功前占位

背景

在写项目时,加载图片未成功前,会出现空白页面,太影响美观和体验感

解决方案

1. element ui通过slot占位符解决

2. 自定义指令

原生img标签可以通过自定义指令解决,img标签有onload和onerror事件,都是在渲染成功后才出发,想占位要在渲染前触发

html 复制代码
<template>
     <img
         class="image_item-img"
         v-preload="'loading'" 
         src="https://xx"
         alt="加载失败"
     />
</template>
<script setup>
import { reactive } from 'vue'

// 自定义图片占位
const vPreload = {
	//未渲染img标签前
    beforeMount(el, binding) {
        el.style.backgroundColor = '#ececec'
        el.classList.add(binding.value) //binding.value是上面传过来'loading',我自定义的类名(可自己定义loading样式)
    },
    mounted(el, binding) {
        el.addEventListener('error', () => {
            el.classList.remove(binding.value)
        })
    },
}
</script>

3.用图片代替

html 复制代码
 <img
     class="image_item-img"
     v-for="(item, index) in imageList"
     :key="item.id"
     :src="item.url ? require('/src/assets/logo.png') : item.url"
     alt="加载失败"
     @click="handlePreview(index)"
 />
相关推荐
辣椒粉丝4 分钟前
记rspack想提issuse,提太慢白嫖不上了
前端·javascript
七月丶9 分钟前
🧼 为什么我开始在项目里禁用 CSS 文件?
前端·javascript·后端
心系10 分钟前
vue项目引入marvinJS
前端·vue.js
李剑一10 分钟前
兄弟们,2025年了!求求你优化一下图片加载吧
前端·vue.js
好柿会發生11 分钟前
关于chartjs的简单使用,各位大佬有知道什么办法通过js设置图表的宽高嘛
javascript·vue.js
海底火旺14 分钟前
【灵魂拷问】你的JS类型检测真的正确吗?Object.prototype.toString.call才是永远的神!
前端·javascript·面试
前端太佬15 分钟前
Vue3异步数据加载的陷阱与最佳实践:从内存泄漏到优雅实现
前端·javascript·vue.js
前端太佬18 分钟前
v-show 的隐藏魔法:为什么它比 v-if 更“懒”?
前端·javascript·vue.js
歡進38 分钟前
🔥 每个故事都是一种设计模式
前端·javascript·设计模式
雯0609~1 小时前
vue3:十一、主页面布局(修改左侧导航条的样式)
前端·javascript·html