初心者です。
jsで3分のカウントダウンタイマーを作り、3分経過後に’TIME UP!’と表示させたいです。
スタート、ストップ、リセットは正常に動くのですが、スタート後残り1秒になったあと動かなくなります。
どのようにすると良いのでしょうか?
よろしくお願いいたします。
該当のソースコード
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="js9.css">
<script>
var interval_id;
var start_click = false;
var time = 180;
var min = 0;
var sec = 0;
function count_start(){
if(start_click === false){
interval_id = setInterval(count_down , 1000);
start_click = true;
}
}
function count_down(){
var display = document.getElementById('display');
if (time === 1 ){
display.innerHTML = 'TIME UP!';
}else{
time--;
min = Math.floor(time / 60);
sen = Math.floor(time % 60);
display.innerHTML = '0' + min +':' + sen ;
}
if (sen<10) {
display.innerHTML = '0' + min + ':' + '0' + sen;
}
}
function count_stop(){
clearInterval(interval_id);
start_click = false;
}
function count_reset(){
time = 180;
min = 0;
sen = 0;
var reset = document.getElementById('display');
reset.innerHTML = '03:00';
}
window.onload = function(){
var start = document.getElementById('start');
start.addEventListener('click' , count_start , false);
var stop = document.getElementById('stop');
stop.addEventListener('click', count_stop , false );
var reset = document.getElementById('reset');
reset.addEventListener('click', count_reset , false );
}
</script>
</head>
<body>
<div id = 'timer'>
<div id = 'box'>
<p id = 'display'>03:00</p>
<div id= 'button'>
<button id = 'start'>スタート</button>
<button id = 'stop'>ストップ</button>
<button id = 'reset'>リセット</button>
</div>
</div>
</div>
</body>
</html>
試したこと
function count_down(){
var display = document.getElementById('display');
if (time === 1 ){
display.innerHTML = 'TIME UP!';
この後にクリアインターバルが必要なのかと思い入れましたがダメでした。
他の方が同じ課題を作ったものでdocument.getElementByIdをifの中に入れているものを見たので、同じように中に入れたのですがダメでした。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
'TIME UP!'
と書き込んだ後 if (sen<10) {
の分岐で上書きしていませんか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
以下のようにしてみてはいかがでしょうか?
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="js9.css">
<script>
var interval_id;
var start_click = false;
var time = 10;
var min = 0;
var sec = 0;
function count_start() {
if (start_click === false) {
interval_id = setInterval(count_down, 1000);
start_click = true;
}
}
function count_down() {
var display = document.getElementById('display');
if (time === 1) {
display.innerHTML = 'TIME UP!';
count_stop();
} else {
time--;
min = Math.floor(time / 60);
sec = Math.floor(time % 60); // senをsecに修正。
display.innerHTML = '0' + min + ':' + ( sec < 10 ? '0' : '') + sec;// 修正、追記。
}
}
function count_stop() {
clearInterval(interval_id);
start_click = false;
}
function count_reset() {
time = 10;
min = 0;
sec = 0; // senをsecに修正。
var reset = document.getElementById('display');
reset.innerHTML = '00:10';
}
window.onload = function () {
var start = document.getElementById('start');
start.addEventListener('click', count_start, false);
var stop = document.getElementById('stop');
stop.addEventListener('click', count_stop, false);
var reset = document.getElementById('reset');
reset.addEventListener('click', count_reset, false);
}
</script>
</head>
<body>
<div id='timer'>
<div id='box'>
<p id='display'>00:10</p>
<div id='button'>
<button id='start'>スタート</button>
<button id='stop'>ストップ</button>
<button id='reset'>リセット</button>
</div>
</div>
</div>
</body>
</html>
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
ドットインストールの
JavaScriptでカウントダウンタイマーを作ろう
https://dotinstall.com/lessons/countdown_js
を読んでみてはいかがでしょう?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
kei344
2017/10/10 21:33
質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
jimsy
2017/10/10 22:28
すいません。修正いたしました。