我想尽快发现Date().getSeconds()
值的变化。
我目前使用:
function updateClock {
....
}
function detectChange(previousSec) {
var currentSec = new Date().getSeconds();
if (previousSec !== currentSec) {
updateClock();
}
}
setInterval(function () {
var dat = new Date();
var sec = dat.getSeconds;
detectChange(sec);
}, 10);
有更好的方法吗?
谢谢!
答案 0 :(得分:1)
两步流程怎么样?
首先,将时钟与系统的0毫秒标记对齐
setTimeout(startClock, 1000 - (new Date()).getMilliseconds());
然后,你只需要每秒打一次
function startClock() {
setInterval(function do_your_thing() { ... }, 1000);
}
Practical demonstration (jsfiddle)表明即使你在周期中做了大量工作,这种方法也非常稳定。事实上,在我的机器上,你获得的精度比±16ms resolution typically achievable in desktop task schedulers更好。
答案 1 :(得分:0)
不幸的是,当时钟变化秒时没有标准事件触发,所以你需要设置一个间隔来检测它。
设置每1000毫秒的间隔意味着您的时钟可能会关闭几乎一整秒。因此,我可以理解为什么你想要检查秒数而不是每秒一次。这里的核心概念是抽样率。我们采样的速度越快,我们就越精确,但处理时间越多,浪费在检测变化上。
我认为这对你有用。
function updateClock (date) {
console.log(date);
};
(function () {
var oldDate = new Date();
return setInterval(function () {
var date = new Date();
if (date.getSeconds() != oldDate.getSeconds()) {
updateClock(date);
}
oldDate = date;
}, 10); // precision is ~10ms
})();
答案 2 :(得分:-1)
每一秒后它会有一个新值,因此只需要一个1秒间隔的计时器。