コード:
function loadImages(sources, callback){
var images = {};
var loadedImages = 0;
var numImages = 0;
for (var src in sources) {
numImages++;
}
for (var src in sources) {
images[src] = new Image();
images[src].onload = function(){
if (++loadedImages >= numImages) {
callback(images);
}
};
images[src].src = sources[src];
}
}
window.onload = function(images){
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var sources = {
darthVader: "darth-vader.jpg",
yoda: "yoda.jpg"
};
loadImages(sources, function(images){
context.drawImage(images.darthVader, 100, 30, 200, 137);
context.drawImage(images.yoda, 350, 55, 93, 104);
});
};
混乱
function loadImages(sources, callback){
3:2つのパラメーターがこの関数に渡されます。1つはそれ自体が関数です:callback
var images = {};
4:最後に、画像は... nul(?)に設定されます
var loadedImages = 0;
var numImages = 0;
// get num of sources
for (var src in sources) {
numImages++;
}
for (var src in sources) {
images[src] = new Image();
images[src].onload = function(){
if (++loadedImages >= numImages) {
callback(images);
5:この時点で私の脳は混乱しています...
}
};
images[src].src = sources[src];
}
}
window.onload = function(images){
私が理解しているように、
1:パラメータ「画像」が空です。
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var sources = {
darthVader: "darth-vader.jpg",
yoda: "yoda.jpg"
};
loadImages(sources, function(images){
2:これで、このインライン関数にパラメーターとして渡されます-まだどこも指さないで...上で定義されたloadImagesメソッドを呼び出すと思われます...
context.drawImage(images.darthVader, 100, 30, 200, 137);
ダースベイダーのコンテキストはどこで得られますか?私は「ソース」が上記のdarthVaderを持っているのを見るだけです
context.drawImage(images.yoda, 350, 55, 93, 104);
});
};
ソース:http ://www.html5canvastutorials.com/tutorials/html5-canvas-image-loader/
編集:質問::
ステップ4から5:(特に2番目のforループで)、新しい配列(images [src])が作成され、ステップ2の直前にインラインとして定義されたcallback()関数に渡されます。ソースにあった画像を実際にどこから取得しますか?