質問編集履歴

3

修正

2020/07/01 05:34

投稿

begine
begine

スコア7

test CHANGED
File without changes
test CHANGED
@@ -182,7 +182,7 @@
182
182
 
183
183
 
184
184
 
185
- ブロックスコープ内で以下のように記述したら解決できました。
185
+ ブロック内で以下のように記述したら解決できました。
186
186
 
187
187
 
188
188
 

2

修正

2020/07/01 05:34

投稿

begine
begine

スコア7

test CHANGED
File without changes
test CHANGED
@@ -72,13 +72,13 @@
72
72
 
73
73
 
74
74
 
75
- function countDown() {
75
+ function countDown() {
76
-
76
+
77
- timerId = setTimeout (function() {
77
+ timerId = setTimeout (function() {
78
78
 
79
79
  timeLeft = timeToCountDown - (Date.now() - startTime);
80
80
 
81
-
81
+
82
82
 
83
83
 
84
84
 
@@ -92,7 +92,7 @@
92
92
 
93
93
  updateTimer(timeLeft);
94
94
 
95
-
95
+
96
96
 
97
97
  btn.classList.remove('disabled');
98
98
 
@@ -130,212 +130,94 @@
130
130
 
131
131
 
132
132
 
133
-
134
-
135
-
136
-
137
- sbtn.addEventListener('click', function() {
133
+ btn.addEventListener('click', () => {
134
+
138
-
135
+ if (btn.classList.contains('disabled')) {
136
+
137
+ return;
138
+
139
+ }
140
+
141
+ btn.classList.add('disabled');
142
+
143
+
144
+
145
+ if (currentNum === quizSet.length - 1) {
146
+
147
+ scoreLabel.innerHTML = `${quizSet.length} <br>
148
+
139
- startTime = Date.now();
149
+ ${score}<br>
150
+
140
-
151
+ ${accuracy.toFixed(2)}%`; // 仮
152
+
153
+ result.classList.remove('hidden');
154
+
155
+ } else {
156
+
157
+ currentNum++;
158
+
141
- countDown();
159
+ setQuiz();
160
+
161
+ }
142
162
 
143
163
  });
144
164
 
145
-
165
+ }
166
+
167
+
168
+
146
-
169
+ ```
170
+
147
-
171
+ ### 試したこと
172
+
173
+
174
+
148
-
175
+ エラー文を検索してコード間違いを探したのですが、解決することができません。
176
+
177
+
178
+
149
- function shuffle(arr) {
179
+ ### 補足情報(FW/ツールのバージョンなど)
180
+
181
+
182
+
183
+
184
+
150
-
185
+ ブロックスコープ内で以下のように記述したら解決できました。
186
+
187
+
188
+
189
+ ```javascript
190
+
191
+ showResult(); // 仮
192
+
193
+
194
+
151
- for (let i = arr.length - 1; i > 0; i--) {
195
+ function showResult(){ //
196
+
152
-
197
+ const accuracy = correct + wrong === 0 ? 0 : correct / (correct + wrong) * 100;
198
+
199
+ if (currentNum === quizSet.length - 1) {
200
+
201
+ scoreLabel.innerHTML = `${quizSet.length} <br>
202
+
203
+ ${score} <br>
204
+
205
+ ${accuracy.toFixed(2)}%`; //仮
206
+
153
- const j = Math.floor(Math.random() * (i + 1));
207
+ result.classList.remove('hidden');
208
+
154
-
209
+ } else {
210
+
155
- [arr[j], arr[i]] = [arr[i], arr[j]];
211
+ currentNum++;
212
+
213
+ setQuiz();
156
214
 
157
215
  }
158
216
 
159
- return arr;
160
-
161
217
  }
162
218
 
163
-
164
-
165
- function checkAnswer(li) {
166
-
167
- if (isAnswered) {
168
-
169
- return;
170
-
171
- }
172
-
173
- isAnswered = true;
174
-
175
-
176
-
177
- if (li.textContent === quizSet[currentNum].c[0]) {
178
-
179
- li.classList.add('correct');
180
-
181
- score++;
182
-
183
- } else {
184
-
185
- li.classList.add('wrong');
186
-
187
- }
188
-
189
-
190
-
191
- btn.classList.remove('disabled');
192
-
193
- }
194
-
195
-
196
-
197
- function setQuiz() {
198
-
199
- isAnswered = false;
200
-
201
-
202
-
203
- question.textContent = quizSet[currentNum].q;
204
-
205
-
206
-
207
- while (choices.firstChild) {
208
-
209
- choices.removeChild(choices.firstChild);
210
-
211
- }
212
-
213
-
214
-
215
- const shuffledChoices = shuffle([...quizSet[currentNum].c]);
216
-
217
- shuffledChoices.forEach(choice => {
218
-
219
- const li = document.createElement('li');
220
-
221
- li.textContent = choice;
222
-
223
- li.addEventListener('click', () => {
224
-
225
- checkAnswer(li);
226
-
227
- if (currentNum === quizSet.length - 1) clearTimeout(timerId);
228
-
229
- });
219
+ });
230
-
231
- choices.appendChild(li);
232
-
233
- });
234
-
235
-
236
-
237
- if (currentNum === quizSet.length - 1) {
238
-
239
- btn.textContent = '結果発表';
240
-
241
- }
242
-
243
- }
244
-
245
-
246
-
247
- setQuiz();
248
-
249
-
250
-
251
- btn.addEventListener('click', () => {
252
-
253
- if (btn.classList.contains('disabled')) {
254
-
255
- return;
256
-
257
- }
258
-
259
- btn.classList.add('disabled');
260
-
261
-
262
-
263
- if (currentNum === quizSet.length - 1) {
264
-
265
- scoreLabel.innerHTML = `${quizSet.length} <br>
266
-
267
- ${score}<br>
268
-
269
- ${accuracy.toFixed(2)}%`; // 仮
270
-
271
- result.classList.remove('hidden');
272
-
273
- } else {
274
-
275
- currentNum++;
276
-
277
- setQuiz();
278
-
279
- }
280
-
281
- });
282
220
 
283
221
  }
284
222
 
285
-
286
-
287
- ```
223
+ ```
288
-
289
- ### 試したこと
290
-
291
-
292
-
293
- エラー文を検索してコード間違いを探したのですが、解決することができません。
294
-
295
-
296
-
297
- ### 補足情報(FW/ツールのバージョンなど)
298
-
299
-
300
-
301
-
302
-
303
- 以下のように記述したら解決することができました。
304
-
305
-
306
-
307
- ```javascript
308
-
309
- showResult(); // 仮
310
-
311
-
312
-
313
- function showResult(){ // 仮
314
-
315
- const accuracy = correct + wrong === 0 ? 0 : correct / (correct + wrong) * 100;
316
-
317
- if (currentNum === quizSet.length - 1) {
318
-
319
- scoreLabel.innerHTML = `${quizSet.length} <br>
320
-
321
- ${score} <br>
322
-
323
- ${accuracy.toFixed(2)}%`; //仮
324
-
325
- result.classList.remove('hidden');
326
-
327
- } else {
328
-
329
- currentNum++;
330
-
331
- setQuiz();
332
-
333
- }
334
-
335
- }
336
-
337
- });
338
-
339
- }
340
-
341
- ```

1

修正

2020/07/01 05:31

投稿

begine
begine

スコア7

test CHANGED
File without changes
test CHANGED
@@ -32,131 +32,25 @@
32
32
 
33
33
 
34
34
 
35
+
36
+
35
37
  ```html
36
38
 
37
- <!DOCTYPE html>
39
+
38
-
39
- <html lang="ja">
40
+
40
-
41
- <head>
41
+
42
-
43
- <meta charset="utf-8">
42
+
44
-
45
- <title>Quiz</title>
46
-
47
- <link rel="stylesheet" href="css/styles.css">
48
-
49
- </head>
50
-
51
- <body>
52
-
53
- <section class="container2"> <!-- スタート画面-->
54
-
55
- <p>ボタンクリックで時間制限のあるクイズが始まります。</p>
56
-
57
- <div class="sbtn_move">
43
+ <section class="container3">
58
-
44
+
59
- <button id="sbtn" type="button" onclick="location.href='quiz.html'">START</button>
45
+ <div id="timer">00:00.00</div> <!--カウントダウンタイマーを表示-->
60
-
46
+
61
- </div>
47
+ <div hidden id="correct"></div> <!-- 仮 -->
48
+
49
+ <div hidden id="wrong"></div> <!-- 仮 -->
62
50
 
63
51
  </section>
64
52
 
65
- <section hidden>
53
+
66
-
67
- <div></div>
68
-
69
- </section>
70
-
71
-
72
-
73
- <div hidden id="question"></div> <!--要素を取得させるだけのため、非表示-->
74
-
75
- <div hidden id="choices"></div>
76
-
77
- <div hidden id="setQuiz"></div>
78
-
79
- <div hidden id="timer"></div>
80
-
81
- <div hidden id="btn"></div> <!--要素を取得させるだけのため、非表示-->
82
-
83
-
84
-
85
- <script src="js/main.js"></script>
86
-
87
- </body>
88
-
89
- </html>
90
-
91
-
92
-
93
- ```
94
-
95
-
96
-
97
- ```html
98
-
99
-
100
-
101
- <!DOCTYPE html>
102
-
103
- <html lang="ja">
104
-
105
- <head>
106
-
107
- <meta charset="utf-8">
108
-
109
- <title>Quiz</title>
110
-
111
- <link rel="stylesheet" href="css/styles.css">
112
-
113
- </head>
114
-
115
- <body>
116
-
117
- <section class="container"> <!-- クイズ画面-->
118
-
119
- <p id="question"></p> <!--問題文,jsで扱いやすいようにidを使う。-->
120
-
121
- <ul id="choices"> <!--選択肢-->
122
-
123
- </ul>
124
-
125
- <div id="btn" class="disabled">Next</div> <!--次の問題に進むボタン,押せない状態のボタン-->
126
-
127
-
128
-
129
- <section class="container3">
130
-
131
- <div id="timer">00:00.00</div> <!--カウントダウンタイマーを表示-->
132
-
133
- <div hidden id="correct"></div> <!-- 仮 -->
134
-
135
- <div hidden id="wrong"></div> <!-- 仮 -->
136
-
137
- </section>
138
-
139
- <section id="result" class="hidden"> <!--結果画面,最初はクラスで画面外へ隠す-->
140
-
141
- <p></p>
142
-
143
- <a href="index.html">Replay?</a> <!--ページ再読み込みでゲームを最初から始める-->
144
-
145
- </section>
146
-
147
- </section>
148
-
149
-
150
-
151
- <button hidden id="sbtn"></button> <!--要素を取得させるだけのため、このボタンは非表示-->
152
-
153
-
154
-
155
- <script src="js/main.js"></script>
156
-
157
- </body>
158
-
159
- </html>
160
54
 
161
55
 
162
56
 
@@ -168,25 +62,9 @@
168
62
 
169
63
 
170
64
 
171
- 'use strict';
65
+
172
-
173
-
174
-
175
- {
66
+
176
-
177
- const question = document.getElementById('question');
67
+
178
-
179
- const choices = document.getElementById('choices');
180
-
181
- const btn = document.getElementById('btn');
182
-
183
- const result = document.getElementById('result');
184
-
185
- const scoreLabel = document.querySelector('#result > p');
186
-
187
- const timer = document.getElementById('timer');
188
-
189
- const sbtn = document.getElementById('sbtn');
190
68
 
191
69
  const correct = document.getElementById('correct'); // 仮
192
70
 
@@ -194,269 +72,259 @@
194
72
 
195
73
 
196
74
 
197
- let startTime; //STARTボタンを押したときの時刻(宣言)
75
+ function countDown() {
198
-
76
+
199
- let timeLeft; //残り時間
77
+ timerId = setTimeout (function() {
200
-
78
+
201
- const timeToCountDown = 5 * 1000;
79
+ timeLeft = timeToCountDown - (Date.now() - startTime);
202
-
203
- let timerId; //clearTimeoutの引数に渡す
204
-
205
-
206
80
 
207
81
 
208
82
 
209
83
 
210
84
 
85
+ if(timeLeft < 0){
86
+
211
- function updateTimer(t) {
87
+ clearTimeout(timerId);
88
+
212
-
89
+ timeLeft = 0;
90
+
91
+
92
+
213
- const d = new Date(t);
93
+ updateTimer(timeLeft);
214
-
215
- let m = d.getMinutes();
94
+
216
-
217
- let s = d.getSeconds();
95
+
218
-
219
- let ms = d.getMilliseconds();
96
+
220
-
221
- m = ('0' + m).slice(-2);
222
-
223
- s = ('0' + s).slice(-2);
97
+ btn.classList.remove('disabled');
224
-
225
- ms = ('00' + ms).slice(-3);
98
+
226
-
227
- timer.textContent = m + ':' + s + '.' + ms;
99
+ btn.textContent = '結果発表';
100
+
228
-
101
+ currentNum = quizSet.length - 1;
102
+
103
+ isAnswered = true;
104
+
105
+ return;
106
+
229
- }
107
+ }
108
+
109
+
110
+
230
-
111
+ updateTimer(timeLeft);
112
+
231
-
113
+ countDown();
114
+
232
-
115
+ showResult(); // 仮
116
+
117
+ }, 10);
118
+
119
+ }
120
+
121
+
122
+
123
+
124
+
125
+ function showResult(){ // 仮
126
+
127
+ const accuracy = correct + wrong === 0 ? 0 : correct / (correct + wrong) * 100;
128
+
129
+ }
130
+
131
+
132
+
133
+
134
+
135
+
136
+
233
- document.addEventListener('DOMContentLoaded', function() {
137
+ sbtn.addEventListener('click', function() {
234
-
138
+
235
- startTime = Date.now();
139
+ startTime = Date.now();
236
-
140
+
237
- countDown();
141
+ countDown();
238
142
 
239
143
  });
240
144
 
241
145
 
242
146
 
243
- function countDown() {
244
-
245
- timerId = setTimeout (function() {
246
-
247
- timeLeft = timeToCountDown - (Date.now() - startTime);
248
-
249
-
250
-
251
-
252
-
253
- if(timeLeft < 0){
254
-
255
- clearTimeout(timerId);
256
-
257
- timeLeft = 0;
258
-
259
-
260
-
261
- updateTimer(timeLeft);
262
-
263
-
264
-
265
- btn.classList.remove('disabled');
266
-
267
- btn.textContent = '結果発表';
268
-
269
- currentNum = quizSet.length - 1;
270
-
271
- isAnswered = true;
272
-
273
- return;
274
-
275
- }
276
-
277
-
278
-
279
- updateTimer(timeLeft);
280
-
281
- countDown();
282
-
283
- showResult(); // 仮
284
-
285
- }, 10);
286
-
287
- }
288
-
289
-
290
-
291
-
292
-
293
- function showResult(){ // 仮
294
-
295
- const accuracy = correct + wrong === 0 ? 0 : correct / (correct + wrong) * 100;
296
-
297
- }
298
-
299
-
300
-
301
-
302
-
303
-
304
-
305
- sbtn.addEventListener('click', function() {
306
-
307
- startTime = Date.now();
308
-
309
- countDown();
147
+
148
+
149
+ function shuffle(arr) {
150
+
151
+ for (let i = arr.length - 1; i > 0; i--) {
152
+
153
+ const j = Math.floor(Math.random() * (i + 1));
154
+
155
+ [arr[j], arr[i]] = [arr[i], arr[j]];
156
+
157
+ }
158
+
159
+ return arr;
160
+
161
+ }
162
+
163
+
164
+
165
+ function checkAnswer(li) {
166
+
167
+ if (isAnswered) {
168
+
169
+ return;
170
+
171
+ }
172
+
173
+ isAnswered = true;
174
+
175
+
176
+
177
+ if (li.textContent === quizSet[currentNum].c[0]) {
178
+
179
+ li.classList.add('correct');
180
+
181
+ score++;
182
+
183
+ } else {
184
+
185
+ li.classList.add('wrong');
186
+
187
+ }
188
+
189
+
190
+
191
+ btn.classList.remove('disabled');
192
+
193
+ }
194
+
195
+
196
+
197
+ function setQuiz() {
198
+
199
+ isAnswered = false;
200
+
201
+
202
+
203
+ question.textContent = quizSet[currentNum].q;
204
+
205
+
206
+
207
+ while (choices.firstChild) {
208
+
209
+ choices.removeChild(choices.firstChild);
210
+
211
+ }
212
+
213
+
214
+
215
+ const shuffledChoices = shuffle([...quizSet[currentNum].c]);
216
+
217
+ shuffledChoices.forEach(choice => {
218
+
219
+ const li = document.createElement('li');
220
+
221
+ li.textContent = choice;
222
+
223
+ li.addEventListener('click', () => {
224
+
225
+ checkAnswer(li);
226
+
227
+ if (currentNum === quizSet.length - 1) clearTimeout(timerId);
228
+
229
+ });
230
+
231
+ choices.appendChild(li);
232
+
233
+ });
234
+
235
+
236
+
237
+ if (currentNum === quizSet.length - 1) {
238
+
239
+ btn.textContent = '結果発表';
240
+
241
+ }
242
+
243
+ }
244
+
245
+
246
+
247
+ setQuiz();
248
+
249
+
250
+
251
+ btn.addEventListener('click', () => {
252
+
253
+ if (btn.classList.contains('disabled')) {
254
+
255
+ return;
256
+
257
+ }
258
+
259
+ btn.classList.add('disabled');
260
+
261
+
262
+
263
+ if (currentNum === quizSet.length - 1) {
264
+
265
+ scoreLabel.innerHTML = `${quizSet.length} <br>
266
+
267
+ ${score}<br>
268
+
269
+ ${accuracy.toFixed(2)}%`; // 仮
270
+
271
+ result.classList.remove('hidden');
272
+
273
+ } else {
274
+
275
+ currentNum++;
276
+
277
+ setQuiz();
278
+
279
+ }
310
280
 
311
281
  });
312
282
 
313
-
314
-
315
-
316
-
317
- const quizSet = shuffle([
318
-
319
- {q: '世界で一番大きな湖は?', c: ['カスピ海', 'カリブ海', '琵琶湖']},
320
-
321
- {q: '2の8乗は?', c: ['256', '64', '1024']},
322
-
323
- {q: '次うち最初にリリースされた言語は?', c: ['Python', 'JavaScript', 'HTML']},
324
-
325
- ]);
326
-
327
- let currentNum = 0;
328
-
329
- let isAnswered;
330
-
331
- let score = 0;
332
-
333
-
334
-
335
- function shuffle(arr) {
336
-
337
- for (let i = arr.length - 1; i > 0; i--) {
338
-
339
- const j = Math.floor(Math.random() * (i + 1));
340
-
341
- [arr[j], arr[i]] = [arr[i], arr[j]];
342
-
343
- }
344
-
345
- return arr;
346
-
347
- }
348
-
349
-
350
-
351
- function checkAnswer(li) {
352
-
353
- if (isAnswered) {
354
-
355
- return;
356
-
357
- }
358
-
359
- isAnswered = true;
360
-
361
-
362
-
363
- if (li.textContent === quizSet[currentNum].c[0]) {
364
-
365
- li.classList.add('correct');
366
-
367
- score++;
368
-
369
- } else {
370
-
371
- li.classList.add('wrong');
372
-
373
- }
374
-
375
-
376
-
377
- btn.classList.remove('disabled');
378
-
379
- }
380
-
381
-
382
-
383
- function setQuiz() {
384
-
385
- isAnswered = false;
386
-
387
-
388
-
389
- question.textContent = quizSet[currentNum].q;
390
-
391
-
392
-
393
- while (choices.firstChild) {
394
-
395
- choices.removeChild(choices.firstChild);
396
-
397
- }
398
-
399
-
400
-
401
- const shuffledChoices = shuffle([...quizSet[currentNum].c]);
402
-
403
- shuffledChoices.forEach(choice => {
404
-
405
- const li = document.createElement('li');
406
-
407
- li.textContent = choice;
408
-
409
- li.addEventListener('click', () => {
410
-
411
- checkAnswer(li);
412
-
413
- if (currentNum === quizSet.length - 1) clearTimeout(timerId);
414
-
415
- });
416
-
417
- choices.appendChild(li);
418
-
419
- });
420
-
421
-
422
-
423
- if (currentNum === quizSet.length - 1) {
424
-
425
- btn.textContent = '結果発表';
426
-
427
- }
428
-
429
- }
430
-
431
-
432
-
433
- setQuiz();
434
-
435
-
436
-
437
- btn.addEventListener('click', () => {
438
-
439
- if (btn.classList.contains('disabled')) {
440
-
441
- return;
442
-
443
- }
444
-
445
- btn.classList.add('disabled');
446
-
447
-
448
-
449
- if (currentNum === quizSet.length - 1) {
450
-
451
- scoreLabel.innerHTML = `${quizSet.length} <br>
452
-
453
- ${score}<br>
454
-
455
- ${accuracy.toFixed(2)}%`; // 仮
283
+ }
284
+
285
+
286
+
287
+ ```
288
+
289
+ ### 試したこと
290
+
291
+
292
+
293
+ エラー文を検索してコード間違いを探したですが解決することができません。
294
+
295
+
296
+
297
+ ### 補足情報(FW/ツールのバージョンなど)
298
+
299
+
300
+
301
+
302
+
303
+ 以下のように記述したら解決することができました。
304
+
305
+
306
+
307
+ ```javascript
308
+
309
+ showResult(); // 仮
310
+
311
+
312
+
313
+ function showResult(){ // 仮
314
+
315
+ const accuracy = correct + wrong === 0 ? 0 : correct / (correct + wrong) * 100;
316
+
317
+ if (currentNum === quizSet.length - 1) {
318
+
319
+ scoreLabel.innerHTML = `${quizSet.length} <br>
320
+
321
+ ${score} <br>
322
+
323
+ ${accuracy.toFixed(2)}%`; //仮
456
324
 
457
325
  result.classList.remove('hidden');
458
326
 
459
- } else {
327
+ } else {
460
328
 
461
329
  currentNum++;
462
330
 
@@ -464,24 +332,10 @@
464
332
 
465
333
  }
466
334
 
335
+ }
336
+
467
- });
337
+ });
468
338
 
469
339
  }
470
340
 
471
-
472
-
473
- ```
341
+ ```
474
-
475
- ### 試したこと
476
-
477
-
478
-
479
- エラー文を検索してコード間違いを探したのですが、解決することができません。
480
-
481
-
482
-
483
- ### 補足情報(FW/ツールのバージョンなど)
484
-
485
-
486
-
487
- ここにより詳細な情報を記載してください。