vue自定义指令 - v-real-img

本文介绍了一个Vue自定义指令`v-real-img`的实现,该指令用于在图片加载时检查其是否能成功加载。如果图片加载成功,它将替换默认图片显示;在网络延迟或图片数量多的情况下,此功能可以提供占位图效果。文章通过示例代码展示了如何在模板中使用该指令,并提供了检测图片是否存在的辅助函数。
摘要由CSDN通过智能技术生成

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)
          }
        }
      }
    }
  }
};

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值