v-real-img
- 注册自定义指令,用于判断当前图片 是否能够加载成功 ,可以加载成功则赋值为img的src属性,否则 使用默认图片 ;
- 在网络慢的时候,加载图片多的时候,可以达到 占位图 的效果;
- 使用方法:
<img src="默认图片.png" v-real-img="真实图片.png">
<template>
<div class="game-card flex pointer">
<!-- <img :src="require(row.src) /> -->
<img src="~@/assets/images/default-game-img.png" v-real-img="row.src" />
</div>
</template>
const imageIsExist = function (url) {
return new Promise((resolve) => {
let img = new Image();
img.onload = function () {
if (this.complete === true) {
resolve(true)
img = null
}
}
img.onerror = function () {
resolve(false)
img = null
}
img.src = url
})
}
export default {
name: "game-card",
props: {
row: {
type: Object,
default() {
return {};
},
},
},
directives: {
"real-img": {
async inserted(el, binding) {
let imgUrl = binding.value;
if (imgUrl) {
let exist = await imageIsExist(imgUrl);
if (exist) {
el.setAttribute("src", imgUrl)
}
}
}
}
}
};