判断img图片是否加载成功
上班之余,记录一下工作中遇到的有趣问题...
事情是这样的...在做一个内嵌H5的app时,有一个“个人名片”页面...要求:如果后台接口有给头像的图片链接就用他们给的,如果没给,前端给个默认头像...测试过程中发现,接口的图片链接有可能是无效的,就像这样一个链接http://www.test.com/wuxiao.png...我们当时的做法是判断avaterUrl(头像链接字段)是否存在,存在的情况下并不知道这张图片是否有效...如果是无效图片链接显示出来的是
,很明显这样很糟糕...
ios开发人员说:我们可以知道这张图片是否加载失败,失败的话我们就替换成其他图片...
当时我就想:前端能不能判断图片是否加载成功呢?于是就开始去了解img的加载...(博文只给我目前掌握的最推荐的做法,一些不靠谱的不讨论...)
判断img是否加载成功需要用到2个事件:onload和onerror...但是什么时候将图片绑定事件呢?window.onload之后肯定不行,因为window.onload执行时图片已加载完毕...而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
关于图片加载是否成功了讨论告一段落...如有好的方案,欢迎留言评论...
判断img图片是否加载成功的更多相关文章
- js判断图片是否加载成功
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Jquery判断页面图片是否加载失败,加载失败则显示默认图片
例子: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- 微信小程地图片未加载成功的情况 Failed to load local image resource
在开发小程序的时候,发现在加载图片时并没有异常,但是后台却报错了. 例如以下我的一段代码: <view class="useage2 "> <image src= ...
- js 判断图片和视频是否加载成功
图片: 失败: // 方法 1:更换图片地址 $('img').error(function(){ $(this).attr('src', '加载失败.png'); }); // 方法 2:隐藏它 $ ...
- JS判断图片是否加载完成三种方式
1.img的complete属性 轮询不断监测img的complete属性,如果为true则表明图片已经加载完毕,停止轮询.该属性所有浏览器都支持. <p id="p1"&g ...
- JavaScript判断图片是否加载完成的三种方式
JavaScript判断图片是否加载完成的三种方式 有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 1 2 3 4 5 6 7 8 9 10 ...
- javaScript & jquery完美判断图片是否加载完毕
好久没写东西了,正好最近因为工作需要,写了一个瀑布流异步加载的程序. 今天就不谈瀑布流,来谈一下关于load的问题. ----------------------------------------- ...
- js判断图片是否加载完毕
附件: https://www.jb51.net/article/102385.htm 问题: .offset().top和$(window).scrollTop()每次刷新页面后滚动的值有时候会不 ...
- js 判断图片是否加载完成(使用 onload 事件)
我们在写 jquery 的时候一般都会写 $(document).ready,加载完成事件还有一个就是 onload onload 与 ready 的区别是: 1.ready 是 DOM 加载完成的事 ...
随机推荐
- Windows store app[Part 3]:认识WinRT的异步机制
WinRT异步机制的诞生背景 当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应.流畅的操作感变的十分重要. 在连接外部程序接口获取数据,操作本地数 ...
- C#面向对象:多态
此文章转载网站:https://www.cnblogs.com/qixinbo/p/8244583.html 多态: 有多态之前必须要有继承,只有多个类同时继承了同一个类,才有多态这样的说法. 在继承 ...
- GRPC .netcore
GRPC是Google发布的一个开源.高性能.通用RPC(Remote Procedure Call)框架.提供跨语言.跨平台支持.以下以一个.NET Core Console项目演示如何使用GRPC ...
- SQLite Mysql 模糊查找(like)
select UserId,UserName,Name,Sex,Birthday,Height,Weight,Role from xqhit_Users where UserName like &qu ...
- codeforces|CF1054D Changing Array
因为数据范围是2e5级别的,所以我们考虑用异或前缀和来处理区间的异或情况.(比如说a包括b,那么我们通过异或可以知道b对于a的补区间的信息) 之后因为对任意\(a_i\)进行取反操作,会改变它和它之后 ...
- TVS
TVS 电子电路中二极管是非常常见的元器件,按照材料主要分为锗二极管.硅二极管.按用途的不同又可分为瞬态二极管.整流二极管.检波二极管.稳压二极管.变容二极管.光电二极管.发光二极管.开关二极管.快速 ...
- linux kvm虚拟机安装
1.上传ISO文件,这里采用OEL5.8x64iso 2.开始安装OEL5.8 (1)raw格式磁盘 virt- --vcpus= --disk path=/data/test02.img,size= ...
- leecode刷题(13) -- 字符串中的第一个唯一字符
leecode刷题(13) -- 字符串中的第一个唯一字符 字符串中的第一个唯一字符 描述: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = & ...
- C语言小总结
1.函数 有时程序中要多次实现某一功能,就需要多次重复编写实现此功能的代码,这使程序不精练.因此需要模块化程序设计的思想. 函数的返回值要匹配,若函数有返回值可以不接受,但是函数没有返回值不能接受. ...
- dbproxy-main函数
main主函数 /home/id/lua.lua/home/id/lua-c/lua.lua/home/id/lua-c/metatable.lua/home/id/lua-c/1.lua int m ...