デフォルトでは回数を設定できないためイベントの間隔を調べますRequest Animation Frameは回数を設定することはできません。
そのため、最初に1秒間に何回イベントが発生するのかを調べます。
調べる方法は、コールバック関数が現在時刻を取得する仕様を利用し、2秒間で何回イベントが発生するか調べます。
(1秒でもいいのですが、統計的にはより分母が多い方が正確なので。もちろん10秒でもいいのですが)
具体的には、直前のタイムスタンプと現在時刻の差分が指定時間を超えると停止するように作成します。
その間に何回イベントが発生するか計測すればいいことになります。
またコンソールログにイベントの時刻を記録し随時書き出します。
これによりイベントの間隔が何ミリセコンドがわかります。
/* 説明が重複しますが、コールバックメソッドには、1 個の引数 DOMHighResTimeStamp が渡されます。
これは現在の時刻を(time originからの経過ミリ秒数で)示します。
つまり、下記プログラムのtimestampには現在時刻が格納されます。
ベースコードはMDN|Window.requestAnimationFrame()::https://developer.mozilla.org/ja/docs/Web/API/window/requestAnimationFrame
const raf = document.getElementById('some-element-you-want-to-animate');
let start, previousTimeStamp;
let done = false
let rafcount= 0;
function step(timestamp) {
/* コールバックメソッドには、1 個の引数 DOMHighResTimeStamp が渡されます。これは現在の時刻を(time originからの経過ミリ秒数で)示します。 */
console.log(`
raf: ${rafcount}
timestamp: ${timestamp}
`);
if (start === undefined) {
start = timestamp;
}
const elapsed = timestamp - start;
if (previousTimeStamp !== timestamp) {
// ここで Math.min() を使用して、要素がちょうど 200px で止まるようにします。
const count = Math.min(0.1 * elapsed, 200);
raf.style.transform = `translateX(${count}px)`;
if (count === 200) done = true;
}
if (elapsed < 2000) { // Stop the animation after 2 seconds
rafcount++;
previousTimeStamp = timestamp;
if (!done) {
window.requestAnimationFrame(step);raf.textContent= rafcount;
}
}else{
raf.textContent= rafcount;
}
}
window.requestAnimationFrame(step);