directive.js 918 B

123456789101112131415161718192021222324252627282930313233343536
  1. import Vue from 'vue'
  2. /**
  3. * 全局注册自定义指令,用于判断当前图片能否加载成功,可以加载成功赋值img的src属性,否则使用默认图片
  4. * 在网络慢的时候,加载图片多的时候,可以达到占位效果
  5. * 使用方法: <img src="默认图片.jpg" v-real-img="真实图片.png"/>
  6. */
  7. Vue.directive('real-img', async function (el, binding) {
  8. let imgUrl = binding.value; // 获取图片地址
  9. if (imgUrl) {
  10. let exist = await imgIsExist(imgUrl)
  11. if (exist) {
  12. el.setAttribute('src', imgUrl)
  13. }
  14. }
  15. })
  16. /**
  17. * 检测图片是否存在
  18. */
  19. let imgIsExist = function (url) {
  20. return new Promise(resolve => {
  21. var img = new Image()
  22. img.onload = function () {
  23. if (this.complete == true) {
  24. resolve(true)
  25. img = null
  26. }
  27. }
  28. img.onerror = function () {
  29. resolve(false)
  30. img = null
  31. }
  32. img.src = url
  33. })
  34. }