我正在尝试制作秒表 (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
提交
取消