gpt4 book ai didi

Javascript:如何获取window.requestAnimationFrame之间的时间差

转载 作者:数据小太阳 更新时间:2023-10-29 03:51:15 26 4
gpt4 key购买 nike

在 javascript 中获取“window.requestAnimationFrame”回调之间的时间差的最佳方法是什么?

我试过:

// create the best .requestAnimationFrame callback for each browser
window.FPS = (function() {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
function(callback) {window.setTimeout(callback, 1000 / 60);};
})();

// start animation loop
var dt, stamp = (new Date()).getTime();
function loop() {
window.FPS(loop);
var now = (new Date()).getTime();
var dt = now - stamp;
stamp = now;
}
// has "dt" the best accuracy?

最佳答案

大多数现代浏览器会自动将高精度时间戳作为参数发送到每个 requestAnimation 回调循环中:http://caniuse.com/#search=performance

因此,您只需从当前时间戳中减去最后一个时间戳即可得到自上次循环运行以来耗时。

这是示例代码和演示:

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;

var startingTime;
var lastTime;
var totalElapsedTime;
var elapsedSinceLastLoop;

var $total=$('#total');
var $loop=$('#loop');

requestAnimationFrame(loop);

function loop(currentTime){
if(!startingTime){startingTime=currentTime;}
if(!lastTime){lastTime=currentTime;}
totalElapsedTime=(currentTime-startingTime);
elapsedSinceLastLoop=(currentTime-lastTime);
lastTime=currentTime;
$total.text('Since start: '+totalElapsedTime+' ms');
$loop.text('Since last loop: '+elapsedSinceLastLoop+' ms');
requestAnimationFrame(loop);
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<p id=total>T1</p>
<p id=loop>T2</p>
<canvas id="canvas" width=300 height=300></canvas>

对于一些不支持 Performance 的浏览器,您将不得不在内部使用 Date.now() 而不是 currentTime循环,因为这些浏览器不会自动将时间戳发送到循环中。

关于Javascript:如何获取window.requestAnimationFrame之间的时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29957819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com