2012-05-11 5 views
2

可能性の重複:
jQuery or JavaScript: Determine when image finished loading画像のonLoadへの代替を探してい

問題が知られているが、私は任意の簡単な解決策を見つけることができません。

var img = new Image(); 

img.onLoad = function() { 
    console.log("load");   // this event doesn't fire 
}; 

img.src = "img/domino/21.png"; 

console.log(img.complete);  // false 

setTimeout(function() { 
    console.log(img.complete); // sometimes true, sometimes false 
}, 10); 

私はonCompleteイベントの実装を探していましたが、何も見つかりませんでした。助けてくれませんか?

+0

はhttp://stackoverflow.com/questions/4494437/jquery-or-javascript-([この質問]をお試しください画像処理終了時の判定) –

+6

'onload'ではなく' onload'; JavaScriptが大文字と小文字を区別します。 – Phrogz

+1

@Riateche - 私のイメージはDOMにはありません。Imageオブジェクトです。 – ciembor

答えて

6

にイベントハンドラプロパティの適切なスペルはすべて小文字.onload、ない.onLoadです。

var img = new Image(); 

img.onload = function() { 
    console.log("load");   // works every time 
}; 

img.src = "img/domino/21.png"; 

JavaScriptは大文字と小文字が区別されるため、すべてのオブジェクトプロパティに適切な大文字と小文字を使用する必要があります。


.onload以外の選択肢が使用するために、次のとおりです。

img.addEventListener("load", function(e) {...}); 

または(IEの古いバージョンで):

img.attachEvent("onload", function(e) {...}); 

あなたが唯一のイベントハンドラを使用していて、あなたが上がらない場合すでにイベントハンドラを抽象化しているクロスプラットフォームライブラリを使用している場合は、.onloadを使用するのが最も簡単です。

そして、ここでは、イベントハンドラを追加するためのシンプルなクロスブラウザの方法です:

// add event cross browser 
function addEvent(elem, event, fn) { 
    if (elem.addEventListener) { 
     elem.addEventListener(event, fn, false); 
    } else { 
     elem.attachEvent("on" + event, function() { 
      // set the this pointer same as addEventListener when fn is called 
      return(fn.call(elem, window.event)); 
     }); 
    } 
} 
+0

注:質問は、「なぜonLoadが動作しないのか」ではなく、「画像の代替手段を探しています」です。 –

+1

はい、私はそれが機能していなかったので、代替案を探していました。もちろん、すべての答えに感謝しますが、これは私の問題を解決します:)。 – ciembor

+1

@ciembor - OK、私はいくつかの選択肢を追加しました。 – jfriend00

1

img/domino/21.pngの画像はありますか?次のコードはFirebugのコンソールで私のために働いています。

var img = new Image(); 

var onload = function() { 
    console.log('load'); 
} 

img.onload = onload; 

img.src = "http://img.gawkerassets.com/img/17m7otdiw6n8fjpg/original.jpg?" + (new Date()).getMilliseconds(); 
1

あなたはjQueryのを使用できる場合、それは単純なことができます:

$('img').load(foo).error(foo); 

それともバニラとのjavascript:

img.onload = img.onerror = foo; 
+0

なぜdownvote?私は何か見落としてますか? – gdoron

+2

あなたはjQueryに言及したときにプロトタイプ/ mootoolsのファンボを怒らせた –

+1

誰も彼がjQueryを望んでいるとは言わなかった。 –

4
var img = new Image(); 
img.onload = function() { 
    console.log("load"); 
}; 
img.src = "img/domino/21.png"; 
console.log(img.complete);  // false 
setTimeout(function() { 
    console.log(img.complete); // sometimes true, sometimes false 
}, 10); 
クロム、FirefoxとSafariでは

var img = new Image(); 
img.addEventListener('load',function() { 
    console.log("load"); 
}); 
img.src = "img/domino/21.png"; 
console.log(img.complete);  // false 
setTimeout(function() { 
    console.log(img.complete); // sometimes true, sometimes false 
}, 10); 

またはIEやOpera

var img = new Image(); 
img.attachEvent('onload',function() { 
    console.log("load"); 
}); 
img.src = "img/domino/21.png"; 
console.log(img.complete);  // false 
setTimeout(function() { 
    console.log(img.complete); // sometimes true, sometimes false 
}, 10); 
0
var img = new Image(); 

//blah blah... 

img.addEventListener("load",function() { 
    console.log("Loaded!"); 
}); 
関連する問題