基础算法
数据库
Javascript
HTML 编程
SVG
附录
IMG 标签一般用来加载图片,在某些情况下,还会用来做些特别的事,如记录页面访问量,老吴在很多年前见过这种玩法。除了 document 和 window 对象之外,IMG 标签是少有的几个支持 onload
和onerror
事件的标签之一,其他还有 SCRIPT、LINK、FRAME、IFRAME 标签等,即只要有外部文件引用的标签。还有一个事件onabort
,这里不讨论。
在 IMG 标签中,当给定的图片 URL 地址存在且图片加载完成,则触发onload
事件。当给定的图片 URL 地址不存在或网络出错时,则触发onerror
事件。
可以在图片不存在或网络出错时,在onerror
事件中指定一个替换图片,防止出现红叉叉,好像现在的浏览器已经不是红叉叉了。
替换图片必须存在,否则会再次触发onerror
事件,然后再次触发onerror
事件.... 最后的结果就是堆栈溢出。
IMG 标签的onload
事件和 document 的ready
状态(DOMContentLoaded)及 window 的onload
事件执行顺序经测试之后依次是:
不难理解,因为 IMG 标签是 document 的一部分,所以在ready
之前触发,不过应该也与图片大小有关,当图片加载比较慢时,应该在ready
之后触发。
IMG 标签的onerror
事件与onload
事件的执行时机不同,当出错时,始终在ready
之后触发。
src
属性用于指定图片的 URL 地址,与事件相关的逻辑总结如下:
src
地址正确时且图片加载完成触发onload
事件;src
地址不正确时,触发onerror
事件,并且控制台会有报错信息。src
属性时,即不触发onload
事件,也不触发onerror
事件,控制台也没有报错信息。src
地址为空时,只触发onerror
事件,但是控制台没有报错信息。src
属性时,既不会触发onload
事件,也不会触发onerror
事件。所以,想要让 IMG 标签干一些特殊的事,可以设置src
属性但是值为空,然后用onerror
事件做些什么,控制台也不会报错。
root.js 库的 IMG 标签扩展就使用这个原理为onerror
添加了服务器端事件。
(本文完)