注意:我是在 2010 年写的,当时的浏览器是 IE 8/9 beta、Firefox 3.x 和 Chrome 4.x。请仅将其用于研究目的,我怀疑您是否可以将其复制/粘贴到现代浏览器中并使其正常工作。
警告:现在是 2017 年,我仍然时不时地在这方面获得积分,请仅将其用于研究目的。我目前不知道如何检测图像加载状态,但可能有比这更优雅的方法……至少我非常希望有。我强烈建议不要在没有更多研究的情况下在生产环境中使用我的代码。
警告第二部分 Electric Boogaloo:现在是 2019 年,现在大多数 jQuery 功能都内置到 vanilla JS 中。如果您仍在使用它,可能是时候停下来考虑转到MDN并阅读 vanilla JS 必须提供的一些新的和有趣的东西。
我参加这个聚会有点晚了,也许这个答案会帮助别人......
如果您正在使用 jQuery,请不要理会股票事件处理程序(onclick/onmouseover/等),实际上只是完全停止使用它们。使用他们在API 中提供的事件方法。
这将在图像附加到正文之前发出警报,因为当图像加载到内存中时会触发 load 事件。它完全按照您的要求执行:使用 test.jpg 的 src 创建一个图像,当 test.jpg 加载时发出警报,然后将其附加到正文。
var img = $('<img src="test.jpg" />');
img.load(function() {
alert('Image Loaded');
});
$('body').append(img);
这将提醒,在图像插入正文后,再次执行您告诉它的操作:创建图像,设置事件(未设置 src,因此尚未加载),将图像附加到正文(仍然没有 src),现在设置 src... 现在图像已加载,因此事件被触发。
var img = $('<img />');
img.load(function() {
alert('Image Loaded');
});
$('body').append(img);
$img.attr('src','test.jpg');
您当然也可以添加错误处理程序并使用 bind() 合并一堆事件。
var img = $('<img />');
img.bind({
load: function() {
alert('Image loaded.');
},
error: function() {
alert('Error thrown, image didn\'t load, probably a 404.');
}
});
$('body').append(img);
img.attr('src','test.jpg');
根据@ChrisKempen 的请求...
这是在加载 DOM 后确定图像是否损坏的非事件驱动方式。这段代码是StereoChrome一篇文章的衍生代码,它使用自然宽度、自然高度和完整属性来确定图像是否存在。
$('img').each(function() {
if (this.naturalWidth === 0 || this.naturalHeight === 0 || this.complete === false) {
alert('broken image');
}
});