【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)"
 />
相关推荐
可爱的秋秋啊8 分钟前
vue调用腾讯人脸组件封装+接口请求后端调用
前端·javascript·vue.js
绝世唐门三哥21 分钟前
CSS 虚线下划线用法指南:text-decoration 完整解析
前端·javascript·css
苏灿烤鱼33 分钟前
14MB 模型,凭什么跟 270M 对打?
javascript·python·agent
To_OC9 小时前
LC 560 和为 K 的子数组:前缀和配哈希表,这对组合我是真的服了
javascript·算法·程序员
明朝百晓生10 小时前
Deep RL learning[2026/8]
开发语言·javascript·人工智能
用户9385156350710 小时前
ESLint 代码规范完全指南——从 AST 原理到 flat config 逐行解析
javascript·后端·代码规范
kyriewen12 小时前
今年裁了16万技术人——但字节前端岗反而涨了23%
前端·javascript·面试
王林不想说话14 小时前
ES6 到 ES2026 全面进阶指南:新特性、原理、示例与工程落地
前端·javascript·面试
WZzz14 小时前
JavaScript 中 this 的「指向」完整教程
javascript
mONESY14 小时前
浏览器里跑 DeepSeek-R1,这份 worker.js 到底写了什么
javascript