无论如何在浏览器中创建一个可变速度计时器,它会为所有操作系统和浏览器提供完全相同的结果吗?如果我想为每个用户每分钟节拍140次,无论他们的电脑速度如何。
我一直在使用javascript setTimeout()和setInterval(),但我认为它们取决于计算机的速度和程序中的代码量。 如何将系统时钟合并到浏览器中?还是其他任何想法?
答案 0 :(得分:6)
您必须在解决方案中使用setTimeout
或setInterval
,但由于以下原因,这将是不准确的:
您可能希望使用setTimeout
以及手动跟踪当前时间(使用Date
)来执行您的计划。对于你的情况,尝试这样的事情:
function someAction(delta) {
// ...
}
function beat() {
var currentTime = +new Date;
var delta = currentTime - pastTime;
if (delta > 430) { // 430ms ~ 140bpm
pastTime = currentTime;
someAction();
}
setTimeout(beat, 107); // 4x resolution
}
var pastTime = +new Date;
beat();
这应该接近每分钟140次,使用更高的分辨率以避免更大的延迟。这只是一个示例,您可能需要更多地工作以使其为您的应用程序提供最佳性能。
答案 1 :(得分:0)
您可以使用setInterval()
或尝试从Date()
中获取最佳内容。
请注意,时间不准确,我认为是因为JavaScript的单线程性质。
答案 2 :(得分:0)
setTimeout()
和setInterval()
功能几乎是您最好的功能。这些函数的超时参数以毫秒为单位指定,并且不取决于运行浏览器的计算机的整体速度。
然而,这些功能肯定不是硬实时功能,如果浏览器在超时或间隔到期时忙于做其他事情,那么在实际调用回调函数之前可能会有一点延迟。