2017-10-25 3 views
0

ミリ秒、秒、分をカウントできるストップウォッチをJavaScriptで作成したいと考えています。これは私が持っているものである:(あなたがスペースを押してタイマーを停止することができます)JavaScriptのストップウォッチは通常の時間より遅い

var counter = document.getElementsByTagName('h1')[0]; 
 
var miliseconds = 0; 
 
var seconds = 0; 
 
var minutes = 0; 
 

 
function Add() { 
 
    miliseconds++; 
 
    if (miliseconds >= 99) { 
 
    miliseconds = 0; 
 
    seconds++; 
 

 
    if (seconds >= 59) { 
 
     seconds = 0; 
 
     minutes++; 
 
    } 
 
    } 
 

 
    counter.textContent = (minutes ? (minutes > 9 ? minutes : "0" + minutes) : "00") + ":" + 
 
    (seconds ? (seconds > 9 ? seconds : "0" + seconds) : "00") + ":" + 
 
    (miliseconds ? (miliseconds > 9 ? miliseconds : "0" + miliseconds) : "00"); 
 

 
    Timer(); 
 
} 
 

 
function Timer() { 
 
    t = setTimeout(Add, 10); 
 
} 
 

 
Timer(); 
 

 
document.addEventListener("keypress", function(e) { 
 
if (e.keyCode === 32) { 
 
    clearTimeout(t); 
 
} 
 

 
});
<h1 id="counter">00:00:00</h1>

問題は、私はそれが比較するとことを意味し、適切な速度で行かないように見えるということですそれ以外のタイマーでは、徐々にそれらよりも遅くなります(つまり、タイマーのカウント速度が時間の経過とともに減速する)。だから突然5秒差があり、7秒差などになります。 ご協力いただければ幸いです。

+0

は、この質問のヘルプへの答えを行います。https://stackoverflow.com/questions/22975537/js-timer-is-running-slowを – Nick

+0

のsetTimeoutための間隔が最小である、あなたがのために許可する必要がコール間で関数が実行される時間はすべて累積的です。 – RobG

+0

はい、ありがとうございます –

答えて

3

あなたは、その後、たstartTime変数を作成経過時間を計算し、表示するために追加の変数を計算するためにそれを使用する必要があります。

var startTime = Date.now(); 
setTimeout(function(){ 
    var elapsedTime = Date.now() - startTime; 
    // Additional code to calculate hour, minute, second, milisecond here 
}, 10); 
関連する問題