回答編集履歴

3

参考情報を追加しました。

2020/03/08 02:55

投稿

hwatarig
hwatarig

スコア461

test CHANGED
@@ -11,6 +11,10 @@
11
11
 
12
12
 
13
13
  クリックの挙動の記述をforEachで書き換えることで、IEでも動くようになるかもしれません。(再現できる環境が無いので確信が持てませんが……)
14
+
15
+
16
+
17
+ こちらの質問と回答も参考にしてください [for文における、letとvarの挙動の違い](https://teratail.com/questions/205789)
14
18
 
15
19
 
16
20
 
@@ -70,7 +74,7 @@
70
74
 
71
75
  //動画の種類の配列をループさせプロパティを設定
72
76
 
73
- for (var i = 0; i < ytData.length; i++) {
77
+ for (let i = 0; i < ytData.length; i++) {
74
78
 
75
79
  ytPlayer[i] = new YT.Player(ytData[i]["area"], {
76
80
 

2

内容に間違いがあったため、修正しました。

2020/03/08 02:54

投稿

hwatarig
hwatarig

スコア461

test CHANGED
@@ -1,6 +1,4 @@
1
1
  IE11でfor文の初期化にletを用いると特殊な動作をするようなので、これが原因かもしれません。
2
-
3
- `for (let i = 0; i < ytData.length; i++) {`のletをvarに変えて試してみてください。
4
2
 
5
3
 
6
4
 
@@ -9,3 +7,133 @@
9
7
 
10
8
 
11
9
  https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/let
10
+
11
+
12
+
13
+ クリックの挙動の記述をforEachで書き換えることで、IEでも動くようになるかもしれません。(再現できる環境が無いので確信が持てませんが……)
14
+
15
+
16
+
17
+ forEachに書き換えたもの
18
+
19
+ ```
20
+
21
+ var tag = document.createElement("script");
22
+
23
+ tag.src = "https://www.youtube.com/iframe_api";
24
+
25
+ var firstScriptTag = document.getElementsByTagName("script")[0];
26
+
27
+ firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
28
+
29
+
30
+
31
+ //複数動画を扱いたいので動作に使用するそれぞれの要素を配列に格納
32
+
33
+ var ytPlayer = [];
34
+
35
+ var ytData = [
36
+
37
+ {
38
+
39
+ id: "youtube1の動画ID",
40
+
41
+ area: "movie-1",
42
+
43
+ target: "#modal1",
44
+
45
+ trigger: ".modal1-open",
46
+
47
+ close: ".modal1-close"
48
+
49
+ },
50
+
51
+ {
52
+
53
+ id: "youtube2の動画ID",
54
+
55
+ area: "movie-2",
56
+
57
+ target: "#modal2",
58
+
59
+ trigger: ".modal2-open",
60
+
61
+ close: ".modal2-close"
62
+
63
+ }
64
+
65
+ ];
66
+
67
+
68
+
69
+ function onYouTubeIframeAPIReady() {
70
+
71
+ //動画の種類の配列をループさせプロパティを設定
72
+
73
+ for (var i = 0; i < ytData.length; i++) {
74
+
75
+ ytPlayer[i] = new YT.Player(ytData[i]["area"], {
76
+
77
+ width: 800,
78
+
79
+ height: 450,
80
+
81
+ videoId: ytData[i]["id"],
82
+
83
+ playerVars: {
84
+
85
+ rel: 0,
86
+
87
+ loop: 0,
88
+
89
+ videoId: ytData[i]["id"]
90
+
91
+ }
92
+
93
+ });
94
+
95
+ }
96
+
97
+
98
+
99
+ //モーダルの表示と非表示
100
+
101
+ ytData.forEach(function(elm,i) {
102
+
103
+ $(elm.trigger).on("click", function() {
104
+
105
+ console.log("open");
106
+
107
+ $(elm.target).fadeIn();
108
+
109
+ $(".modal__mask").fadeIn();
110
+
111
+ });
112
+
113
+ $(elm.close).on("click", function() {
114
+
115
+ $(elm.target).fadeOut();
116
+
117
+ $(".modal__mask").fadeOut();
118
+
119
+ console.log(ytPlayer[i]);
120
+
121
+ ytPlayer[i].pauseVideo();
122
+
123
+ });
124
+
125
+ })
126
+
127
+ }
128
+
129
+
130
+
131
+ window.addEventListener("load", function() {
132
+
133
+ onYouTubeIframeAPIReady();
134
+
135
+ });
136
+
137
+
138
+
139
+ ```

1

内容に間違いがあったため、修正しました。

2020/03/08 02:51

投稿

hwatarig
hwatarig

スコア461

test CHANGED
@@ -1,6 +1,6 @@
1
1
  IE11でfor文の初期化にletを用いると特殊な動作をするようなので、これが原因かもしれません。
2
2
 
3
- `for (let i = 0; i < ytData.length; i++) {`のletをvarなどに変えて試してみてください。
3
+ `for (let i = 0; i < ytData.length; i++) {`のletをvarに変えて試してみてください。
4
4
 
5
5
 
6
6