【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)"
 />
相关推荐
Code知行合壹11 分钟前
Vue.js基础入门
javascript·vue.js·ecmascript
daols8826 分钟前
vue 表格 vxe-table 手动操作单元格范围选择,手动选择 excel 指定区域的用法
vue.js·excel·vxe-table
QT 小鲜肉1 小时前
【Linux命令大全】003.文档编辑之head命令(实操篇)
linux·运维·服务器·前端·javascript·chrome
小二·1 小时前
Vue Router 4 完全指南:动态路由、权限控制、懒加载与性能优化
前端·javascript·vue.js
伶俐的猪2 小时前
UI_Testing 项目详细文档
开发语言·javascript·ui
卧指世阁2 小时前
不从零开始构建专属 SVG 编辑器的实战指南
前端·javascript·前端框架
Hilaku2 小时前
年薪 50W 的前端,到底比年薪 15W 的强在哪里?
前端·javascript·架构
不想秃头的程序员2 小时前
Vue3 defineModel 完全指南:从基础使用到进阶技巧
前端·vue.js·面试
CC码码2 小时前
迈向开源第一步,给fabric.js提PR
前端·javascript·开源·web·fabric