回答編集履歴

1

コードサンプルを追加

2018/03/26 01:19

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -3,3 +3,45 @@
3
3
 
4
4
 
5
5
  現在`Image`オブジェクトによる画像の読み込み(デコード)処理を同期的に行う方法はありません. 各`Image`オブジェクトの`load`イベントを待ち, 全ての画像の読み込みが完了したことを確認してから画像サイズを取得するようにして下さい.
6
+
7
+ ```JavaScript
8
+
9
+ const img1 = new Image(), img2 = new Image(), img3 = new Image();
10
+
11
+ let loaded = 0, failed = false;
12
+
13
+ img1.onload = img2.onload = img3.onload =
14
+
15
+ img1.onerror = img2.onerror = img3.onerror = function(e){
16
+
17
+ loaded++;
18
+
19
+ if(e.type == "error"){failed = true;}
20
+
21
+ if(loaded < 3){return;}
22
+
23
+ if(!failed){
24
+
25
+ //何らかの処理
26
+
27
+ }else{
28
+
29
+ //失敗時の処理
30
+
31
+ }
32
+
33
+ };
34
+
35
+ img1.src = "xxx.jpg";
36
+
37
+ img2.src = "yyy.png";
38
+
39
+ img3.src = "zzz.gif";
40
+
41
+ ```
42
+
43
+
44
+
45
+ NOTE:
46
+
47
+ 画像の読み込みに`ImageBitmap`オブジェクトを使うことで`Promise`+`async`~`await`により複数画像の読み込みを"同期的"に記述する方法もあります.