茅侃侃
2024-01-18 16:41:17
我正在嘗試制作秒表 (00:00:00:00)。但我的一秒比真正的一秒慢。 我還將 setInterval 10 的值更改為 1,但沒有任何變化。當我將其更改為 100 時,它起作用了,時間流得更慢了。 (00:00:00:00)=(hh:mm:ss:ms) 這是我代碼的一部分:const [time, setTime] = useState({ ms: 0, ss: 0, mm: 0, hh: 0})let degisenMs = time.ms, degisenH = time.hh, degisenM = time.mm, degisenS = time.ss;const run = () => { if (updatedMs === 100) { updatedS++; updatedMs = 0 } if (updatedS === 60) { updatedM++; updatedS = 0; } if (M === 60) { updatedH++; updatedM = 0 } updatedMs++; return (setTime({ ms: updatedMs, ss: updatedS, mm: updatedM, hh: updatedH }))}const start = () => { setStatus(1) run() setInterv(setInterval(run, 10))}
1 回答

海綿寶寶撒
TA貢獻1809條經驗 獲得超8個贊
問題是這并不準確,而是近似值。一種選擇是使用 Web Worker 來提高準確性,如鏈接中所述,但這仍然不準確。setInterval
在測量時間時,最好跟蹤時間戳并計算出每次滴答/更新時經過了多少時間。然后,您可以更新 UI 或觸發警報等。這是一些偽代碼。start
const [ startTime, setStartTime ] = useState(null)
const [ intervalId, setIntervalId ] = useState(null)
function tick() {
const now = new Date()
const elapsedMs = now - startTime
// Update UI etc using elapsedMs
}
function start() {
setStartTime(new Date())
// Run tick() every 100ms
setIntervalId(setInterval(tick, 100))
}
function stop() {
clearInterval(intervalId)
}
添加回答
舉報
0/150
提交
取消