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

回答編集履歴

1

文言

2022/01/06 04:19

投稿

int32_t
int32_t

スコア21931

answer CHANGED
@@ -16,4 +16,30 @@
16
16
  setTimeout(countdown,1000); //1秒ごとに関数countdownを実行させる
17
17
  }
18
18
  ```
19
- `setTimeout(countdown, 1000)` は、`countdown()` を約1秒後に実行することを予約するだけで、`countdown()` の実行終了を待ちません。
19
+ `setTimeout(countdown, 1000)` は、`countdown()` を約1秒後に実行することを予約するだけで、`countdown()` の実行終了を待ちません。関数 `refresh()` は `countdown()` が実行されるより前に終了します。
20
+
21
+ ----
22
+
23
+ 現在のコードをできるだけ尊重するなら、以下のような感じになるでしょうか。
24
+ ```js
25
+ let minute = parseInt(window.prompt('何分測りますか'));  //測りたい分数を入力
26
+ let second = minute * 60; //秒単位にする
27
+ if (second > 0)
28
+ setTimeout(countdown, 1000);
29
+
30
+ function countdown(){
31
+ second -= 1;
32
+ let min = Math.floor(second / 60); //分に直す
33
+ let sec = second % 60; //余りを用いて秒に直す
34
+ document.getElementById('min').textContent = min ; //HTMLに分として表示
35
+ document.getElementById('sec').textContent = sec ; //HTMLに秒として表示
36
+ if (second > 0)
37
+ setTimeout(countdown, 1000);
38
+ else
39
+ window.alert('終了');
40
+ }
41
+ ```
42
+
43
+ ----
44
+
45
+ yambejpさんも書いてますが、`setTimeout()`はそんなに正確な時間で呼び出すわけではないので、正確にやるなら開始時刻と現在時刻の差をチェックするほうがよいです。