d3-timer
このモジュールは、同時アニメーションや段階的なアニメーションとの一貫性のある同期タイミングを保証しながら、数千の同時アニメーションを管理できる効率的なキューを提供します。内部的には、スムーズなアニメーションのためにrequestAnimationFrameを使用し(利用可能な場合)、24ミリ秒を超える遅延に対してはsetTimeoutに切り替えます。
now()
ソース · 利用可能な場合はperformance.nowで定義された現在時刻を、利用できない場合はDate.nowで定義された現在時刻を返します。
d3.now() // 1236.3000000715256
現在の時刻はフレームの開始時に更新されます。したがって、フレーム中は一貫しており、同じフレーム中にスケジュールされたタイマーはすべて同期されます。このメソッドが、ユーザーイベントへの応答など、フレームの外側で呼び出された場合、現在時刻が計算され、次のフレームまで固定されます。これにより、イベント処理中の一貫したタイミングも保証されます。
timer(callback, delay, time)
ソース · 新しいタイマーをスケジュールし、タイマーが停止されるまで、指定されたcallbackを繰り返し呼び出します。遅延後に指定されたcallbackを呼び出すための、オプションの数値のdelay(ミリ秒単位)を指定できます。delayが指定されていない場合は、ゼロがデフォルトになります。遅延は、指定されたtime(ミリ秒単位)を基準にします。timeが指定されていない場合は、nowがデフォルトになります。
callbackには、タイマーがアクティブになってからの(見かけ上の)elapsed時間が渡されます。たとえば
const t = d3.timer((elapsed) => {
console.log(elapsed);
if (elapsed > 200) t.stop();
}, 150);
これは、ほぼ次のコンソール出力を生成します
3
25
48
65
85
106
125
146
167
189
209
(正確な値は、JavaScriptのランタイムやコンピューターが他に何をしているかによって異なる場合があります。)最初のelapsed時間が3ミリ秒であることに注意してください。これは、タイマーがスケジュールされてからではなく、タイマーが開始されてからの経過時間です。ここでは、指定された遅延のため、タイマーはスケジュールされてから150ミリ秒後に開始されました。ページがバックグラウンドに置かれ、requestAnimationFrameが一時停止されると、見かけ上のelapsed時間が実際のelapsed時間よりも少なくなる場合があります。バックグラウンドでは、見かけ上の時間が凍結されます。
timerが別のタイマーのコールバック内で呼び出された場合、新しいタイマーのコールバックは(指定されたdelayとtimeによって決定されるように、有効な場合)、次のフレームまで待機するのではなく、現在のフレームの最後にすぐに呼び出されます。フレーム内では、タイマーのコールバックは、開始時刻に関係なく、スケジュールされた順序で呼び出されることが保証されています。
timer.restart(callback, delay, time)
ソース · 指定されたcallbackとオプションのdelayおよびtimeを使用して、タイマーを再起動します。これは、このタイマーを停止し、指定された引数で新しいタイマーを作成することと同じですが、このタイマーは元の呼び出し優先度を保持します。
timer.stop()
ソース · このタイマーを停止し、後続のコールバックを防止します。タイマーがすでに停止している場合、このメソッドは効果がありません。
timerFlush()
ソース · 有効なタイマーのコールバックをすぐに呼び出します。ゼロ遅延タイマーは通常、1フレーム後(〜17ミリ秒)に最初に実行されることに注意してください。これにより、ブラウザーがページを2回レンダリングするため、短いちらつきが発生する可能性があります。最初は最初のイベントループの最後に、次に最初のタイマーのコールバックですぐにです。最初のイベントループの最後にタイマーキューをフラッシュすることで、ゼロ遅延タイマーをすぐに実行し、ちらつきを回避できます。
timeout(callback, delay, time)
ソース · timerと似ていますが、最初のコールバックでタイマーが自動的に停止される点が異なります。setTimeoutの適切な代替であり、バックグラウンドで実行されないことが保証されています。callbackには、経過時間が渡されます。
interval(callback, delay, time)
ソース · timerと似ていますが、callbackはdelayミリ秒ごとにのみ呼び出される点が異なります。delayが指定されていない場合は、timerと同じです。setIntervalの適切な代替であり、バックグラウンドで実行されないことが保証されています。callbackには、経過時間が渡されます。