2013-02-20 4 views
14

は、私が使用できます:イメージの読み込みイベントにバブリングが使用できますか?

window.addEventListner(); 

何らかの方法で。

すべての画像にはdisplay = 'none'があります。画像が読み込まれたら

は私がdisplay = 'inline'

私はイメージがダウンロードされている間に表示される内容を標準化することができるこの方法を設定したいです。

この場合、画像をプリロードできません。ライブラリなし

答えて

10

load/onloadイベントがバブルreferencereference)しないので、何を求めていることはできません。各画像ノードにイベントハンドラをアタッチする必要があります。

+0

「異常に」さえありません。もう1つの参考文献:http://www.w3.org/TR/DOM-Level-3-Events/#event-type-load – bfavaretto

+0

私は、これがイベントバブリングの目的だと思ったでしょう。しかし、私は私の質問を更新していないと思います。 –

+0

他の多くの出来事は、「クリック」のように泡立ちます。しかし、 'load'がバブルしないという事実は、イメージをプリロードすることはできません。なぜ、すべての画像に対して 'load'を扱うための関数を一つ作成しないのですか? – bfavaretto

0
$('img').on('load', function() { 
    $(this).show() 
}) 

window.onload = function() { 
    var imgs = document.querySelectorAll('img') 
    imgs.onload = function() { 
     this.style.display = 'inline'; 
    } 
} 
+0

@pure_code? :-) – Neal

+0

すべての画像がロードされた後に* window.onloadが呼ばれていませんか? –

+0

@FelixKlingは必ずしも必要ではありません。 – Neal

1

あなたはImage.onloadイベントハンドラを使用することができますが、関与発泡は全くありません。

var i = new Image; 
i.onload = function() { 
    this.style.display = 'block'; 
} 
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が既に設定されているかどうかを確認します。

39

使用window以外のいくつかのDOMノード(bodyまたは関心の画像要素の他の親)にイベントリスナーをキャプチャ:あなたは添付(再)にはありません。これにより

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

+1

イメージロードイベントのイベントデリゲートにこれを試したことはありませんでした。非常に素晴らしい!そして、それがウィンドウすることができない理由は: "レガシーの理由のために、ドキュメント(例えば、イメージ)内のリソースに対するロードイベントは、HTMLインプリメンテーションにおける伝播経路内のウィンドウを含まない" – Adria

関連する問題