的JavaScript,requestAnimationFrame:JS requestAnimationFrame幀速率
你知道幀速率在不同情況下如何是不同的(即對例如,不同的瀏覽器)
如何找出一個幀速率特殊案例?
謝謝
的JavaScript,requestAnimationFrame:JS requestAnimationFrame幀速率
你知道幀速率在不同情況下如何是不同的(即對例如,不同的瀏覽器)
如何找出一個幀速率特殊案例?
謝謝
這裏是一個功能查找依賴requestAnimationFrame()
爲支持它的所有設備的幀速率。唯一的缺點是精度不是即時的。您可以很容易地將四捨五入到最接近的標準幀速率,並以這種方式獲得非常快速的返回值,但此代碼計算平均超過60幀以獲得requestAnimationFrame()
的更準確讀數。
function RAF_tester() {
var i = 1;
var prevT;
requestAnimationFrame(function(startT) {
requestAnimationFrame(function RAF_loop(currentT) {
var elapsedT = currentT - startT;
var RAF_interval = currentT - prevT;
var RAF_average = 1000/(elapsedT/i);
console.log(RAF_interval);
diagnostic.innerHTML = 'Average FPS: '+RAF_average;
prevT = currentT;
i += 1; if (i<61) { requestAnimationFrame(RAF_loop); }
});
});
}
希望它適合你!
嘗試在codepen:http://codepen.io/kandleflame/pen/QEgQoE
...創建一個新的'Date'對象,並在他的不準確的now()方法中生效,同時在rAF的回調中傳遞一個高精度的時間參數...奇怪... – Kaiido
更改爲'performance .now()'爲更高的精度。 –
你甚至不需要調用'performance.now()',它已經在你的回調中作爲參數傳遞了:'requestAnimationFrame(function(time){})''time'將是一個[DOMHighResTimeStamp](https ://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp)就像'performance.now()'返回的那個一樣。不需要調用任何東西,它將表示調用完整堆所請求的函數的時間,同時自己調用它只會返回當您調用它時的時間。其他函數在堆疊之前會有所不同,也僅僅是因爲通話需要一些時間 – Kaiido
*「回調的數目通常爲每秒60次,但一般會匹配在大多數Web瀏覽器按照W3C推薦的顯示器刷新率。」 *,它通常是相當不錯的準確,但如果你真的想知道幀率只需幾秒鐘計算每秒回調數並獲得平均值,那麼對於大多數情況來說應該足夠準確。 – adeneo
你已經在你的'rAF()'回調函數中傳遞了一個高精度參數,只需將它保存在回調函數的範圍之外,並檢查上次在下一次迭代時保存的差異。 – Kaiido