回答編集履歴
1
文言
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()`はそんなに正確な時間で呼び出すわけではないので、正確にやるなら開始時刻と現在時刻の差をチェックするほうがよいです。
|