使用 setInterval 使时钟自动刷新

Making a clock autorefresh using setInterval

我想建立一个时钟,我唯一的问题是 setInterval 基本上不起作用。我是不是漏了什么

const timer = document.getElementById("container")
let currentTime = new Date()

let hours = currentTime.getHours()
let minutes = currentTime.getMinutes()
let seconds = currentTime.getSeconds()



function time () {

        let hoursIf = hours.toString().length==1 ? "0"+hours : hours
        let minutesIf = minutes.toString().length==1 ? "0"+ minutes : minutes
        let secondsIf = seconds.toString().length==1 ? "0" +seconds : seconds

        timer.textContent = `${hoursIf}:${minutesIf}:${secondsIf}`

}
time()
let run = setInterval(time, 1000)

它有效,相信我。问题是分配在:

let hours = currentTime.getHours()
let minutes = currentTime.getMinutes()
let seconds = currentTime.getSeconds()

您在开始时分配了一次时间,以后不检查更新值。如果你把它放在你的时间函数中,它就会正常工作。 像这样:

function time () {
        let currentTime = new Date()

        let hours = currentTime.getHours()
        let minutes = currentTime.getMinutes()
        let seconds = currentTime.getSeconds()

        let hoursIf = hours.toString().length==1 ? "0"+hours : hours
        let minutesIf = minutes.toString().length==1 ? "0"+ minutes : minutes
        let secondsIf = seconds.toString().length==1 ? "0" +seconds : seconds

        timer.textContent = `${hoursIf}:${minutesIf}:${secondsIf}`

}
time()
let run = setInterval(time, 1000)

您没有更新变量。您将它们作为全局变量,但从不更新它们的值,因此方法“时间”一直使用相同的值。

let currentTime = new Date()

let hours = currentTime.getHours()
let minutes = currentTime.getMinutes()
let seconds = currentTime.getSeconds()

这些应该在您的方法中设置或至少更新为当前值。否则你只是 re-displaying 每次 time 执行的同一时间。

如果你在你的方法中加入“Console.log”,我敢打赌你会看到它 运行,它只是没有像你期望的那样更新时间。