回答編集履歴

1

文言

2022/01/06 04:19

投稿

int32_t
int32_t

スコア20923

test CHANGED
@@ -34,4 +34,56 @@
34
34
 
35
35
  ```
36
36
 
37
- `setTimeout(countdown, 1000)` は、`countdown()` を約1秒後に実行することを予約するだけで、`countdown()` の実行終了を待ちません。
37
+ `setTimeout(countdown, 1000)` は、`countdown()` を約1秒後に実行することを予約するだけで、`countdown()` の実行終了を待ちません。関数 `refresh()` は `countdown()` が実行されるより前に終了します。
38
+
39
+
40
+
41
+ ----
42
+
43
+
44
+
45
+ 現在のコードをできるだけ尊重するなら、以下のような感じになるでしょうか。
46
+
47
+ ```js
48
+
49
+ let minute = parseInt(window.prompt('何分測りますか'));  //測りたい分数を入力
50
+
51
+ let second = minute * 60; //秒単位にする
52
+
53
+ if (second > 0)
54
+
55
+ setTimeout(countdown, 1000);
56
+
57
+
58
+
59
+ function countdown(){
60
+
61
+ second -= 1;
62
+
63
+ let min = Math.floor(second / 60); //分に直す
64
+
65
+ let sec = second % 60; //余りを用いて秒に直す
66
+
67
+ document.getElementById('min').textContent = min ; //HTMLに分として表示
68
+
69
+ document.getElementById('sec').textContent = sec ; //HTMLに秒として表示
70
+
71
+ if (second > 0)
72
+
73
+ setTimeout(countdown, 1000);
74
+
75
+ else
76
+
77
+ window.alert('終了');
78
+
79
+ }
80
+
81
+ ```
82
+
83
+
84
+
85
+ ----
86
+
87
+
88
+
89
+ yambejpさんも書いてますが、`setTimeout()`はそんなに正確な時間で呼び出すわけではないので、正確にやるなら開始時刻と現在時刻の差をチェックするほうがよいです。