いつもお世話になってます。
javascript初学者です。
現在、簡易的なストップウォッチを作成してます。
ストップウォッチ機能
・startボタンをクリックしたら計測スタート
・stopボタンで一時停止、startボタンを押すと計測再開
・resetボタンを押した時に初期値(0.0)に戻る
今、困っていること
startボタンを押したらカウントが開始されます。
stopボタンを押したらカウントは止まります。
しかし、再度startボタンを押してカウントを再開させようとしたところ、何故か初期値(0.00)に戻ってカウントされてしまいます。
発生している問題・エラーメッセージ
特になし
該当のソースコード
HTML
1<html> 2 <head> 3 <meta charset="utf-8" /> 4 <title>ストップウォッチ|1秒単位で計測</title> 5 <style> 6 * { 7 margin: 0; 8 padding: 0; 9 border: 0; 10 font-size: 50px; 11 font-display: sans-serif; 12 } 13 14 body { 15 background-color: rgb(162, 237, 238); 16 text-align: center; 17 margin: 0 auto; 18 } 19 20 h1 { 21 font-size: 40px; 22 margin: 40px; 23 } 24 25 #timer { 26 margin-bottom: 20px; 27 } 28 29 .myButton { 30 font-size: 25px; 31 margin: 5px; 32 padding: 5px; 33 border-radius: 5px; 34 } 35 </style> 36 </head> 37 38 <body> 39 <h1>ストップウォッチ|1秒単位で計測</h1> 40 <div id="timer">0.00</div> 41 <input type="button" class="myButton" value="start" onClick="start();" /> 42 <input type="button" class="myButton" value="stop" onClick="stop();" /> 43 <input type="button" class="myButton" value="reset" onClick="reset();" /> 44 45 <script type="text/javascript" src="test.js"></script> 46 <!-- 47 <script type="text/javascript" src="191103.js"></script> 48 --> 49 </body> 50</html> 51
javascript
1var startTime = 0; 2var stopTime = 0; 3var timerId; 4var stopCalc = 0; 5 6function start() { 7 startTime = Date.now(); 8 CountTime(); 9} 10 11function stop() { 12 clearTimeout(timerId); 13 stopCalc += Date.now() - startTime; 14} 15 16function reset() { 17 var resetText = document.getElementById("timer"); 18 resetText.textContent = "0.00"; 19} 20 21function CountTime() { 22 timerId = setTimeout(function() { 23 var CountTimeCalc = Date.now() - startTime + stopTime; 24 var CountTimeText = document.getElementById("timer"); 25 CountTimeText.textContent = (CountTimeCalc / 1000).toFixed(2); 26 CountTime(); 27 }, 100); 28}
試したこと①
CountTime関数
でstartボタンを押した時
とstopボタンを押した時
の時間を計算処理してます。
stop関数
の計算処理方法が間違っているのかそもそもこのロジックが間違っているのか自分では判断できないので困ってます。ご教示の程よろしくお願いします。
javascript
1//CountTime関数 2function CountTime() { 3 timerId = setTimeout(function() { 4 var CountTimeCalc = Date.now() - startTime + stopTime; 5 var CountTimeText = document.getElementById("timer"); 6 CountTimeText.textContent = (CountTimeCalc / 1000).toFixed(2); 7 CountTime(); 8 }, 100); 9}
試したこと②
stop関数
に下記のコードを追記するとstopボタン
を押した後にstartボタン
を押すとカウントが再開できるようになりました。
しかし、今度はstartボタン
からresetボタン
を押したら何故か初期値(0.0)に戻らなくなりました。
ご指摘頂いたstart関数
についてもう少し検証していきたいと思います。
javascript
1//stop関数 2function stop() { 3 //追加したコード 4 stopTime += Date.now() - startTime; 5 clearTimeout(timerId); 6}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/09 14:53