【发布时间】:2013-02-05 16:45:47
【问题描述】:
我可以使用吗:
window.addEventListner();
以某种方式。
我所有的图片都有一个display = 'none'。
图片加载完毕后,
我要设置display = 'inline'
这样我可以在下载图像时标准化显示的内容。
在这种情况下,我无法预加载我的图像。
【问题讨论】:
标签: javascript dom-events onload event-bubbling
我可以使用吗:
window.addEventListner();
以某种方式。
我所有的图片都有一个display = 'none'。
图片加载完毕后,
我要设置display = 'inline'
这样我可以在下载图像时标准化显示的内容。
在这种情况下,我无法预加载我的图像。
【问题讨论】:
标签: javascript dom-events onload event-bubbling
在 window(body 或其他感兴趣的图像元素的父级)以外的某个 DOM 节点上使用 capturing 事件侦听器:
document.body.addEventListener(
'load',
function(event){
var tgt = event.target;
if( tgt.tagName == 'IMG'){
tgt.style.display = 'inline';
}
},
true // <-- useCapture
)
有了这个,您不必在遍历document.images 时(重新)附加事件处理程序。
这也适用于动态插入的图像。
Same is true for image's error loading events.MDN:addEventListener
【讨论】:
【讨论】:
click,这肯定很有用。但load 不会冒泡这一事实并不意味着您无法预加载图像。为什么不创建一个函数来处理所有图像的load?
imgs.onload那样做,你必须循环)
Array.prototype.forEach.call(document.querySelectorAll('img'), function (elem) {
elem.addEventListener('load', function () {
this.style.display = 'inline';
});
if (elem.complete) {
elem.style.display = 'inline';
}
});
如果图像已经偶然加载,则不会触发“加载”事件;因此,我们检查complete 是否已经设置。
【讨论】:
您可以使用Image.onload 事件处理程序,但不涉及冒泡。
var i = new Image;
i.onload = function() {
this.style.display = 'block';
}
【讨论】:
由于加载事件不会冒泡,您可以启动自己的冒泡事件。一个 jQuery 的例子:
<img src="dog.jpg" onload="$(this).trigger('image-loaded')" />
【讨论】:
$('img').on('load', function() {
$(this).show()
})
没有库:
window.onload = function() {
var imgs = document.querySelectorAll('img')
imgs.onload = function() {
this.style.display = 'inline';
}
}
【讨论】:
window.onload在所有图片都加载完毕之后调用吗?