亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

判斷img圖片是否加載成功

標簽:
JavaScript

 上班之余,记录一下工作中遇到的有趣问题...

  事情是这样的...在做一个内嵌H5的app时,有一个“个人名片”页面...要求:如果后台接口有给头像的图片链接就用他们给的,如果没给,前端给个默认头像...测试过程中发现,接口的图片链接有可能是无效的,就像这样一个链接http://www.test.com/wuxiao.png...我们当时的做法是判断avaterUrl(头像链接字段)是否存在,存在的情况下并不知道这张图片是否有效...如果是无效图片链接显示出来的是https://img1.sycdn.imooc.com//5b7fe1ac0001850501340038.jpg,很明显这样很糟糕...

  ios开发人员说:我们可以知道这张图片是否加载失败,失败的话我们就替换成其他图片...

  当时我就想:前端能不能判断图片是否加载成功呢?于是就开始去了解img的加载...(博文只给我目前掌握的最推荐的做法,一些不靠谱的不讨论...)

 

  判断img是否加载成功需要用到2个事件:和...但是什么时候将图片绑定事件呢?window.之后肯定不行,因为window.执行时图片已加载完毕...而jquery的ready方法也行不通,因为可能img加载图片失败时,img并没有绑定error事件,就会导致不能替换无效的图片...有人可能会想到事件委托,但是这2个事件是不支持事件委托的...但是,换个思路,全局绑定load或error事件,然后判断事件对象是否为img,只对img做操作...

 

1、加载成功

复制代码

// 图片加载成功时触发load事件,失败不会触发document.addEventListener("load", function (event) {  var ev=event?event||window.event;  var elem = ev.target;  if (elem.tagName.toLowerCase() == 'img') {  
    //  图片加载成功
    //  do something...  }
}, true);

复制代码

 

2、加载失败

复制代码

// 图片加载成功时触发error事件,成功不会触发document.addEventListener("error", function (event) {  var ev=event?event||window.event;  var elem = ev.target;  if (elem.tagName.toLowerCase() == 'img') { 
    // 图片加载失败  --替换为默认 
    elem.src = "../img/default.jpg";
  }
}, true);

复制代码

  看似很完美的替换,But,如果你的默认图片加载也失败的话...所以还是要写好alt属性,提示用户丢失的图片内容...

   

   参考链接:https://www.jb51.net/article/129321.htm

 

    关于图片加载是否成功了讨论告一段落...如有好的方案,欢迎留言评论...

原文出处:https://www.cnblogs.com/chenwenhao/p/9511866.html

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消