teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記日時修正

2015/12/01 23:40

投稿

think49
think49

スコア18194

answer CHANGED
@@ -35,7 +35,7 @@
35
35
  }());
36
36
  ```
37
37
 
38
- **(2015/12/02 17:59追記)**
38
+ **(2015/12/02 07:59追記)**
39
39
  ひょっとして実行順も保証したいという意味だったでしょうか。
40
40
  実行順を保証するコードを追記しました。
41
41
 

2

実行順を保証するコードを追記

2015/12/01 23:40

投稿

think49
think49

スコア18194

answer CHANGED
@@ -34,3 +34,50 @@
34
34
  main();
35
35
  }());
36
36
  ```
37
+
38
+ **(2015/12/02 17:59追記)**
39
+ ひょっとして実行順も保証したいという意味だったでしょうか。
40
+ 実行順を保証するコードを追記しました。
41
+
42
+ ```JavaScript
43
+ 'use strict';
44
+ (function () {
45
+ function handleLoad (event) {
46
+ var img = event.target,
47
+ imgList = this.imgList,
48
+ srcList = this.srcList;
49
+
50
+ img.removeEventListener('load', this, false);
51
+ imgList[srcList.indexOf(img.getAttribute('src'))] = img;
52
+
53
+ if (Object.keys(imgList).length === srcList.length) {
54
+ this.complete(imgList);
55
+ }
56
+ }
57
+
58
+ function next (imgList) {
59
+ for (var i = 0, l = imgList.length, img; i < l; ++i) {
60
+ img = imgList[i];
61
+ console.log(img, img.width, img.height);
62
+ }
63
+ }
64
+
65
+ function main () {
66
+ var srcList = ['sample1.jpg', 'sample2.jpg', 'sample3.jpg'],
67
+ listener = {
68
+ handleEvent: handleLoad,
69
+ srcList: srcList,
70
+ imgList: [],
71
+ complete: next
72
+ };
73
+
74
+ for (var i = 0, l = srcList.length, img; i < l; ++i) {
75
+ img = new Image;
76
+ img.addEventListener('load', listener, false);
77
+ img.src = srcList[i];
78
+ }
79
+ }
80
+
81
+ main();
82
+ }());
83
+ ```

1

`load` イベントのサンプルを追記

2015/12/01 22:59

投稿

think49
think49

スコア18194

answer CHANGED
@@ -1,4 +1,36 @@
1
1
  `setInterval()` で `naturalWidth`, `naturalHeight` を監視すれば原理的には可能です。
2
2
  が、`addEventListener` で `load` を監視したほうが素直ですし、負荷も小さいと思います。
3
- - [HTML Standard](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element)
3
+ - [4.8.4 The img element - HTML Standard](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element)
4
- - [HTMLImageElement - Web API インターフェイス | MDN](https://developer.mozilla.org/ja/docs/Web/API/HTMLImageElement)
4
+ - [HTMLImageElement - Web API インターフェイス | MDN](https://developer.mozilla.org/ja/docs/Web/API/HTMLImageElement)
5
+
6
+ **(2015/12/01 19:56追記)**
7
+ `load` イベントのサンプルを追記しました。
8
+
9
+ ```JavaScript
10
+ 'use strict';
11
+ (function () {
12
+ function handleLoad (event) {
13
+ var img = event.target;
14
+
15
+ img.removeEventListener('load', this, false);
16
+ this.complete(img);
17
+ }
18
+
19
+ function next (img) {
20
+ console.log(img.width, img.height);
21
+ }
22
+
23
+ function main () {
24
+ var srcList = ['sample1.jpg', 'sample2.jpg', 'sample3.jpg'],
25
+ listener = {handleEvent: handleLoad, complete: next};
26
+
27
+ for (var i = 0, l = srcList.length, img; i < l; ++i) {
28
+ img = new Image;
29
+ img.addEventListener('load', listener, false);
30
+ img.src = srcList[i];
31
+ }
32
+ }
33
+
34
+ main();
35
+ }());
36
+ ```