質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

600閲覧

jQueryでの3分タイマーの作成に関して

cabbage7

総合スコア17

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/04/09 12:41

3分タイマーを作成しています。
タイマーの内容は以下の通りとなっております。

■ スタートを押すとタイマーが動き始める

■ ストップを押すとタイマーが停止する

■ リセットを押すと数字が03:00に戻る

■ 3分経過後にTime UP!と表示される

問題点

今の所エラーは発見されないのですが、スタートを押してもタイマーが02:59で動かなくなります。
おそらくsetIntervalが上手く連動していないのではないかと思うのですが
どのようにすれば解決すればよろしいでしょうか。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>timer</title> <script src="http://code.jquery.com/jquery-3.3.1.min.js"></script> <link rel ="stylesheet" href ="challenge_jquery.css"> <script> $(function(){ var time = 180; var setI; var min; var sec; $('#start').on("click", function startTimer() { time -= 1; min = Math.floor( time / 60 ); sec = time % 60; min = ('00' + min).slice(-2); sec = ('00' + sec).slice(-2); $('#timer').html(min + ":" + sec); $('#start').prop('disabled',true); if (time === 0) { $('#timer').html("Time&nbspUP!"); clearInterval(setI); } else { } }); $('#stop').on("click",function stopTimer() { clearInterval(setI); $('#start').prop('disabled',false); }); $('#reset').on("click",function resetTimer() { clearInterval(setI); $('#start').prop('disabled',false); $('#timer').html("03:00"); }); function startInterval() { setI = setInterval(startTimer,1000); } }); </script> </head> <body> <div id = "box"> <div id ="timer">03:00</div> <form> <input type ="button" id ="start" name ="start" value ="スタート"> <input type ="button" id ="stop" name ="stop" value ="ストップ" > <input type ="button" id ="reset" name ="reset" value ="リセット"> </form> </div> </body> </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

せめてこんな感じ

javascript

1<script> 2$(function(){ 3 var time = 180; 4 var setI; 5 var min; 6 var sec; 7 8 function startTimer() { 9 time -= 1; 10 min = Math.floor( time / 60 ); 11 sec = time % 60; 12 min = ('00' + min).slice(-2); 13 sec = ('00' + sec).slice(-2); 14 $('#timer').html(min + ":" + sec); 15 if (time === 0) { 16 $('#timer').html("Time&nbspUP!"); 17 clearInterval(setI); 18 } 19 } 20 $('#start').on("click",function(){ 21 $('#start').prop('disabled',true); 22 startInterval(); 23 }); 24 $('#stop').on("click",function stopTimer() { 25 clearInterval(setI); 26 $('#start').prop('disabled',false); 27 }); 28 $('#reset').on("click",function resetTimer() { 29 clearInterval(setI); 30 time = 180; 31 $('#start').prop('disabled',false); 32 $('#timer').html("03:00"); 33 }); 34 35 function startInterval() { 36 setI = setInterval(startTimer,1000); 37 } 38}); 39</script> 40<div id = "box"> 41<div id ="timer">03:00</div> 42<form> 43<input type ="button" id ="start" name ="start" value ="スタート"> 44<input type ="button" id ="stop" name ="stop" value ="ストップ" > 45<input type ="button" id ="reset" name ="reset" value ="リセット"> 46</form> 47</div> 48

投稿2019/04/10 01:18

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cabbage7

2019/04/10 11:04

ご回答ありがとうございます。 教えていただい通りのコードでタイマーが動きました。 本当に有難うございます。 もしよろしければなぜ私のコードではインターバルが動かなかったのか教えて頂けないでしょうか。
yambejp

2019/04/10 11:34

on("click", function startTimer() { のやり方が、正しく機能しないからですね きちんとインスタンスをつくるか、コールバック領域ではないところで 関数を作成してください
cabbage7

2019/04/10 13:49

ご回答有難うございます。 startTimerを入れ込んでしまっていたことが動作しない原因だったということでしょうか。 度々の質問にご回答いただきまして有難うございます。
guest

0

startIntervalが一度も実行されていないからでは?

投稿2019/04/09 12:45

kei344

総合スコア69400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cabbage7

2019/04/09 13:00

ご回答ありがとうございます。 この状態では実行されていないということですがどのようにすれば正しく実行されるのでしょうか。 もし宜しければ教えて頂けないでしょうか。
kei344

2019/04/09 13:42

「正しく実行」が何を指すのかわかりませんが、スコープ内でstartInterval();とすれば実行されます。 $('#start').on("click")でスタートしたいのであれば、インターバルが動いているか確認して動いてなければインターバルを動かす必要があります。
cabbage7

2019/04/10 10:53

ご回答ありがとうございます。 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問