创建一个精确的毫秒计时器,在 Javascript 中循环
Create an accurate millisecond timer that loops in Javascript
经过一些研究,我了解到在 Javascript 中创建计时器的最准确方法是使用 date.now() -as this answer 比较从起点开始的经过时间建议。
var startTime = Date.now();
var interval = setInterval(function() {
var elapsedTime = Date.now() - startTime;
var time = (elapsedTime / 1000).toFixed(3);
console.log(time);
}, 10);
这提供了我正在寻找的准确性,但我希望让这个计时器在某个值后自行重置(假设 var total = 12000
)。该值由视频播放列表的长度决定(我正在为视频节目构建 'live' 播放头)并且是一个变量。
我不知道该怎么做,因为计数器正在计算从某个时间点开始的经过时间,它不太符合我正在寻找的逻辑。任何建议,将不胜感激。
您可以在所需时间过后使用 .setTimeout()
at the end of your code to restart your .setInterval()
function runInterval (loopAfter) {
var startTime = Date.now();
var interval = setInterval(function() {
var elapsedTime = Date.now() - startTime;
var time = (elapsedTime / 1000).toFixed(3);
console.log(time);
}, 10);
setTimeout(() => {
clearInterval(interval);
runInterval(loopAfter);
}, loopAfter);
}
runInterval(5000);
试试这个:
var startTime = Date.now();
let total = 0;
var interval = setInterval(function() {
if (total === 12000) {
total = 0;
startTime = Date.now();
} else {
total++;
var elapsedTime = Date.now() - startTime;
var time = (elapsedTime / 1000).toFixed(3);
}
console.log(time);
}, 10);
经过一些研究,我了解到在 Javascript 中创建计时器的最准确方法是使用 date.now() -as this answer 比较从起点开始的经过时间建议。
var startTime = Date.now();
var interval = setInterval(function() {
var elapsedTime = Date.now() - startTime;
var time = (elapsedTime / 1000).toFixed(3);
console.log(time);
}, 10);
这提供了我正在寻找的准确性,但我希望让这个计时器在某个值后自行重置(假设 var total = 12000
)。该值由视频播放列表的长度决定(我正在为视频节目构建 'live' 播放头)并且是一个变量。
我不知道该怎么做,因为计数器正在计算从某个时间点开始的经过时间,它不太符合我正在寻找的逻辑。任何建议,将不胜感激。
您可以在所需时间过后使用 .setTimeout()
at the end of your code to restart your .setInterval()
function runInterval (loopAfter) {
var startTime = Date.now();
var interval = setInterval(function() {
var elapsedTime = Date.now() - startTime;
var time = (elapsedTime / 1000).toFixed(3);
console.log(time);
}, 10);
setTimeout(() => {
clearInterval(interval);
runInterval(loopAfter);
}, loopAfter);
}
runInterval(5000);
试试这个:
var startTime = Date.now();
let total = 0;
var interval = setInterval(function() {
if (total === 12000) {
total = 0;
startTime = Date.now();
} else {
total++;
var elapsedTime = Date.now() - startTime;
var time = (elapsedTime / 1000).toFixed(3);
}
console.log(time);
}, 10);