0

このパターンがかなり使われているのを見てきましたが、IE9 では気に入らないようです。これが私の機能の大まかなアイデアです:

function(path){
    $("<img/>",{"src":path}).one("load",function(event,alreadyLoaded) {
        if(!alreadyLoaded) { 
            myObject.loadedImages = myObject.loadedImages || [];
            myObject.loadedImages.push(this);
        }
    // Other code here...                   
    }).each(function() {
        if(this.complete) {
            $(this).trigger("load",true);
        }
    });
}

これは重複している可能性があることは認識していますが、私が見た提案は機能していません: (例: this.readyState // 未初期化を返します)

誰かが私を正しい方向に向けることができれば、それは素晴らしいことです.

4

1 に答える 1

3

.one()src属性または画像ファイルごとではなく、要素ごとに適用されます。そのため、2 つの個別の画像要素を作成して両方を呼び出すと.one("load", ...)、両方の画像がソースを共有し、画像ファイル自体がキャッシュされていても、load イベントが両方の画像に対して発生します。

配列の重複を防ぐには、代わりにハッシュを使用します。

function addImage (path) { 
    $("<img/>").load(function (e) { 
        myObject.loadedImages = myObject.loadedImages || {};
        if(!this.src in myObject.loadedImages) {  
            myObject.loadedImages[this.src] = this; 
        }
    }).attr({ "src": path });
} 
于 2011-12-01T21:08:20.950 に答える