我正在尝试用JavaScript制作一个计时器,用于在WebGL中制作动画。这是使用Date类获取已用时间的代码。
var lastTime = Date.now();
var elapsed = 0;
var timeNow = Date.now();
function animate() {
timeNow = Date.now();
if(timeNow > lastTime) {
elapsed = timeNow - lastTime;
console.log(elapsed);
}
lastTime = timeNow;
}
从window.requestAnimationFrame()回调中调用Animate。但这似乎产生了一个介于16和17之间的值。它永远不会超过20.什么事情发生了?
编辑:实际上,这是我的derp。经历需要+ =不=。谢谢抽象算法解释为什么它在16和17之间。:))答案 0 :(得分:1)
您每秒呼叫animate
60次,因为这可能是您在requestAnimationFrame
中设置的(默认设置)。 1000毫秒/ 60帧= 16.xx毫秒。
因此动画每隔约16ms调用一次,这就是你所得到的。
if ( !window.requestAnimationFrame ) {
window.requestAnimationFrame = ( function() {
return window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function( /* function FrameRequestCallback */ callback, /* DOMElement Element */ element ) {
window.setTimeout( callback, 1000 / 60 ); // so call it every ~16ms
};
} )();
}