`setTimeout` 设置为 1,为什么我的时钟跳秒?
`setTimeout` is set to 1, why is my clock skipping seconds?
我正在研究十进制时钟(100min₁₀ / hr & 100s₁₀ / min₁₀)。 The code 正在跳过小数秒(在 Firefox 中,Chrome 在 Ubuntu 14 & Android 中)。 setTimeout
中的延迟为 1。
function updateTime() {
var now = new Date()
var h = now.getHours();
var m = now.getMinutes();
var s = now.getSeconds();
document.getElementById('babylonian').innerHTML = h+":"+padDigit(m)+":"+padDigit(s)
document.getElementById('decimal').innerHTML = h + "h" + padDigit( Math.round( ( 100 * m ) / 60) ) + "." + padDigit( Math.round( ( 100 * s ) / 60 ) )
setTimeout(updateTime, 1);
}
function padDigit(i) {
return i<10 ? '0' + i : i
}
updateTime()
时钟似乎在同步滴答作响。我不明白为什么。
这是因为每分钟有100"decimal seconds",但只有60秒。所以每秒有 100/60 "decimal seconds".
当您基于 now.getSeconds()
进行计算时,您将在 "decimal seconds" 中获得飞跃。
也可以使用更细粒度的东西,例如 now.getMilliseconds()
:
var s = now.getSeconds() + now.getMilliseconds()/1000;
...
... ... ... Math.floor( s * 100 / 60 ) ...
(对分钟做同样的事情以避免跳过十进制分钟。)
我正在研究十进制时钟(100min₁₀ / hr & 100s₁₀ / min₁₀)。 The code 正在跳过小数秒(在 Firefox 中,Chrome 在 Ubuntu 14 & Android 中)。 setTimeout
中的延迟为 1。
function updateTime() {
var now = new Date()
var h = now.getHours();
var m = now.getMinutes();
var s = now.getSeconds();
document.getElementById('babylonian').innerHTML = h+":"+padDigit(m)+":"+padDigit(s)
document.getElementById('decimal').innerHTML = h + "h" + padDigit( Math.round( ( 100 * m ) / 60) ) + "." + padDigit( Math.round( ( 100 * s ) / 60 ) )
setTimeout(updateTime, 1);
}
function padDigit(i) {
return i<10 ? '0' + i : i
}
updateTime()
时钟似乎在同步滴答作响。我不明白为什么。
这是因为每分钟有100"decimal seconds",但只有60秒。所以每秒有 100/60 "decimal seconds".
当您基于 now.getSeconds()
进行计算时,您将在 "decimal seconds" 中获得飞跃。
也可以使用更细粒度的东西,例如 now.getMilliseconds()
:
var s = now.getSeconds() + now.getMilliseconds()/1000;
...
... ... ... Math.floor( s * 100 / 60 ) ...
(对分钟做同样的事情以避免跳过十进制分钟。)