【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)"
 />
相关推荐
南山安3 小时前
HTML5 自定义属性 data-*:别再把数据塞进 class 里了!
前端·javascript·代码规范
努力的白熊嗨3 小时前
大文件 Hash 计算:Web Worker 并行优化的原理与局限性
javascript·算法
T___T3 小时前
深入浅出:JavaScript 字符串反转的 6 种解法与面试技巧
javascript·面试
摇滚侠3 小时前
Vue 项目实战《尚医通》,利用 Qrcode 获取二维码,笔记51
vue.js·笔记
hen3y3 小时前
基于 jscodeshift 构建高效 Codemod 工具指南
前端·javascript
默海笑3 小时前
VUE后台管理系统:定制化、高可用前台样式处理方案
前端·javascript·vue.js
YaeZed4 小时前
Vue3-toRef、toRefs、toRaw
前端·vue.js
Y***K4344 小时前
TypeScript模块解析
前端·javascript·typescript
草莓熊Lotso4 小时前
Git 本地操作进阶:版本回退、撤销修改与文件删除全攻略
java·javascript·c++·人工智能·git·python·网络协议
想看一次满天星4 小时前
阿里140-语雀逆向分析
javascript·爬虫·python·语雀·阿里140