回答編集履歴

3

FireFoxでエラーハンドリングで止まることに対応。Chrome、FireFox、Edgeで完全動作することを確認。

2022/04/15 01:44

投稿

nekora
nekora

スコア501

test CHANGED
@@ -1,247 +1,126 @@
1
1
  letを使っているところを見るとグローバル変数とローカル変数について勉強されたようですね。
2
-
3
2
  なので、今回のコードは厳密に、letとvarを使い分けて書きました。
4
3
 
5
-
6
-
7
4
  src属性を持つものが何らかの原因で読み込めないときは、すっごくありきたりな
8
-
9
5
  errorというイベントを投げます。
10
-
11
6
  なのでそいつを拾ってやって、再度乱数抽選、srcへセット、load、playとすればOKです。
12
-
13
-
14
7
 
15
8
  [参考文献:https://html.spec.whatwg.org/multipage/scripting.html#script](https://html.spec.whatwg.org/multipage/scripting.html#script)
16
9
 
17
10
 
18
-
19
-
20
-
21
11
  ```html
22
-
23
12
  <html>
24
-
25
13
  <body background="https://helps2020.ml/_share/BGD.gif">
26
-
27
14
  <style>
28
-
29
15
  td {
30
-
31
16
  width: 370px;
32
-
33
17
  }
34
-
35
18
  </style>
36
-
37
19
  <audio type="audio/mpeg" id="audioElement" controls="controls">
38
-
39
20
  <source id="srcElement" src="" type="audio/mp3">
40
-
41
21
  </audio>
42
-
43
22
   <script type="text/javascript">
44
-
45
23
  var src = [
46
-
47
24
  '001.mp3', /*  No.01  */
48
-
49
25
  '002.mp3', /*  No.02  */
50
-
51
26
  '003.mp3', /* 用意してないファイル */
52
-
53
27
  ];
54
28
 
55
-
56
-
57
29
  /* global variables */
58
-
59
30
  var currentRand = 0;
60
-
61
31
  var src_elm = document.getElementById("srcElement");
62
-
63
32
  var audio_elm = document.getElementById("audioElement");
64
-
65
33
  var start_time;
66
34
 
67
-
68
-
69
35
  /* create new randmize number */
70
-
71
36
  var randmize_wrapper = function () {
72
-
73
37
  var rand = Math.floor( Math.random() * src.length );
74
-
75
38
  return rand;
76
-
77
39
  }
78
40
 
79
-
80
-
81
41
  /* 全コンテンツの読み込みが終わったタイミングで実行される処理 */
82
-
83
42
  document.addEventListener("DOMContentLoaded", function() {
43
+ let rand = randmize_wrapper();
44
+ currentRand = rand;
45
+ src_elm.setAttribute('src', src[rand]);
46
+ audio_elm.load();
47
+ audio_elm.play();
48
+ });
49
+
50
+ /* audioタグで1曲の再生が終わったタイミングで呼び出される処理 */
51
+ audio_elm.addEventListener('ended', function() {
52
+ let rand = randmize_wrapper();
53
+ while ( currentRand == rand ) {
54
+ rand = randmize_wrapper();
55
+ }
56
+ currentRand = rand;
57
+ src_elm.setAttribute('src', src[rand]);
58
+ audio_elm.load();
59
+ audio_elm.play();
60
+ });
61
+
62
+ /* srcに指定されたファイルが読み込めなかったときに発生するイベントを処理する */
63
+ src_elm.addEventListener('error', function(event) {
64
+ event.stopPropagation();
65
+ event.preventDefault();
66
+ time();
67
+ let element = document.createElement('div');
68
+ element.innerHTML = start_time + ' 【Error】NOT Found<br>';
69
+ document.body.insertBefore(element, audio_elm.nextSibling);
84
70
 
85
71
  let rand = randmize_wrapper();
86
-
72
+ while ( currentRand == rand ) {
73
+ rand = randmize_wrapper();
74
+ }
87
- currentRand = rand;
75
+ currentRand = rand;
88
-
89
76
  src_elm.setAttribute('src', src[rand]);
90
-
91
77
  audio_elm.load();
92
-
93
78
  audio_elm.play();
94
-
95
79
  });
96
80
 
97
-
98
-
99
- /* audioタグで1曲の再生が終わったタイミングで呼び出される処理 */
100
-
101
- audio_elm.addEventListener('ended', function() {
102
-
103
- let rand = randmize_wrapper();
104
-
105
- while ( currentRand == rand ) {
106
-
107
- rand = randmize_wrapper();
108
-
109
- }
110
-
111
- currentRand = rand;
112
-
113
- src_elm.setAttribute('src', src[rand]);
114
-
115
- audio_elm.load();
116
-
117
- audio_elm.play();
118
-
119
- });
120
-
121
-
122
-
123
- /* srcに指定されたファイルが読み込めなかったときに発生するイベントを処理する */
124
-
125
- src_elm.addEventListener('error', function() {
126
-
127
- time();
128
-
129
- let element = document.createElement('div');
130
-
131
- element.innerHTML = start_time + ' 【Error】NOT Found<br>';
132
-
133
- document.body.insertBefore(element, audio_elm.nextSibling);
134
-
135
-
136
-
137
- let rand = randmize_wrapper();
138
-
139
- while ( currentRand == rand ) {
140
-
141
- rand = randmize_wrapper();
142
-
143
- }
144
-
145
- currentRand = rand;
146
-
147
- src_elm.setAttribute('src', src[rand]);
148
-
149
- audio_elm.load();
150
-
151
- audio_elm.play();
152
-
153
- });
154
-
155
-
156
-
157
81
  function time() {
158
-
159
82
  let nowTime = new Date();
160
83
 
161
-
162
-
163
84
  let nowHour = nowTime.getHours();
164
-
165
85
  let nowMin = nowTime.getMinutes();
166
-
167
86
  let nowSec = nowTime.getSeconds();
168
87
 
169
-
170
-
171
88
  /* 0埋めの定型処理 */
172
-
173
89
  nowHour = "00" + String(nowHour);
174
-
175
90
  nowMin = "00" + String(nowMin);
176
-
177
91
  nowSec = "00" + String(nowSec);
178
-
179
92
  nowHour = nowHour.substr(nowHour.length-2, 2);
180
-
181
93
  nowMin = nowMin.substr(nowMin.length-2, 2);
182
-
183
94
  nowSec = nowSec.substr(nowSec.length-2, 2);
184
95
 
185
-
186
-
187
96
  start_time = nowHour + ":" + nowMin + ":" + nowSec;
188
-
189
97
  };
190
98
 
191
99
 
192
-
193
-
194
-
195
100
  function name() {
196
-
197
101
  let element = document.createElement('div');
198
-
199
-
200
102
 
201
103
  setInterval(time, 500);
202
104
 
203
-
204
-
205
105
  let playtime = audio_elm.currentTime;
206
-
207
106
  if (playtime > 0 && playtime < 1) {
208
-
209
107
  switch(currentRand) {
210
-
211
108
  case 0:
212
-
213
109
  element.innerHTML = '<table><tr><th>'+ start_time +'</th><td>ID:01 曲名A</td><td>作曲A</td></tr><table>';
214
-
215
110
  break;
216
-
217
111
  case 1:
218
-
219
112
  element.innerHTML = '<table><tr><th>'+ start_time +'</th><td>ID:02 曲名B</td><td>作曲B</td></tr><table>';
220
-
221
113
  break;
222
-
223
114
  default:
224
-
225
115
  element.innerHTML = start_time + ' 【Error】NOT Found<br>';
226
-
227
116
  break;
228
-
229
117
  }
230
118
 
231
-
232
-
233
119
  document.body.insertBefore(element, audio_elm.nextSibling);
234
-
235
120
  }
236
-
237
121
  };
238
-
239
122
  setInterval(name, 1000);
240
-
241
123
  </script>
242
-
243
124
   </body>
244
-
245
125
  </html>
246
-
247
126
  ```

2

誤字の修正

2021/06/29 12:52

投稿

nekora
nekora

スコア501

test CHANGED
@@ -150,8 +150,6 @@
150
150
 
151
151
  audio_elm.play();
152
152
 
153
-
154
-
155
153
  });
156
154
 
157
155
 

1

誤字の修正

2021/06/29 12:52

投稿

nekora
nekora

スコア501

test CHANGED
@@ -6,7 +6,9 @@
6
6
 
7
7
  src属性を持つものが何らかの原因で読み込めないときは、すっごくありきたりな
8
8
 
9
+ errorというイベントを投げます。
10
+
9
- errorというイベントを投げます。なのでそいつを拾ってやって、再度乱数抽選、srcへセットload、playとすればOKです。
11
+ なのでそいつを拾ってやって、再度乱数抽選、srcへセットload、playとすればOKです。
10
12
 
11
13
 
12
14