私が書いているアプリケーションには、データベースから base64 でエンコードされた複数の画像を読み込み、それらを JavaScript 配列内に配置するページがあります。これは EJS テンプレートを介してサーバー上で発生しているため、ユーザーが HTML ページを受信すると、base64 でエンコードされた画像が表示されます (これを確認しました)。
次のステップでは、クライアント側で JavaScript を使用してキャンバスをループし、各キャンバスに対応する画像データを入力します。しかし、私は奇妙な振る舞いをしています。毎回、最後のキャンバスだけが塗りつぶされます。
for (var i = 1; i < 13; i++) {
var ctx = document.getElementById('canvas-' + i).getContext('2d'),
image = new Image();
image.onload = function() {
ctx.drawImage(image, 0, 0);
}
image.src = images[(i - 1)];
}
images 配列は、このコードのすぐ上 (同じスコープ内) で定義されています。このようなコードを実行すると、最後のキャンバス (id 'canvas-12') だけが塗りつぶされます。for ループの終了条件をたとえば i < 11 に下げると、id が「canvas-10」のキャンバスのみが塗りつぶされます。
足りないものはありますか?