26

我可以用吗:

window.addEventListner();

某种程度上来说。

我所有的图像都有一个display = 'none'.

图像加载后,

我想设置display = 'inline'

通过这种方式,我可以标准化下载图像时显示的内容。

在这种情况下,我无法预加载我的图像。

4

6 回答 6

67

在(或感兴趣的图像元素的其他父级)以外的某个 DOM 节点上使用捕获事件侦听器:windowbody

document.body.addEventListener(
    'load',
    function(event){
        var tgt = event.target;
        if( tgt.tagName == 'IMG'){
            tgt.style.display = 'inline';
        }
    },
    true // <-- useCapture
)

有了这个,您不必在迭代时(重新)附加事件处理程序document.images

这也适用于动态插入的图像。

图像的error加载事件也是如此。MDN:添加事件监听器

于 2014-07-07T12:55:04.747 回答
16

/事件不会冒泡loadonload参考参考),所以你要求的是不可能的。如其他答案中所建议的,您必须将事件处理程序附加到每个图像节点,或在捕获阶段拦截事件。

于 2013-02-21T00:36:16.257 回答
2
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已经设置。

于 2013-02-20T15:48:30.347 回答
1

您可以使用Image.onload事件处理程序,但不涉及冒泡。

var i = new Image;
i.onload = function() {
  this.style.display = 'block';
}
于 2013-02-20T15:46:33.640 回答
0

由于加载事件不会冒泡,因此您可以启动自己的冒泡事件。一个 jQuery 的例子:

<img src="dog.jpg" onload="$(this).trigger('image-loaded')" />
于 2019-03-01T11:02:35.963 回答
-1
$('img').on('load', function() {
    $(this).show()
})

没有库:

window.onload = function() {
   var imgs = document.querySelectorAll('img')
   imgs.onload = function() {
      this.style.display = 'inline';
   }
}
于 2013-02-20T15:45:32.803 回答