Skip to content
Source
Sign inSign up
Open History to see the last commit

renderScheduler.ts

22 lines564 Bytes

1export function createRenderScheduler(
2 render: () => void,
3 request: (callback: FrameRequestCallback) => number = requestAnimationFrame,
4 cancel: (id: number) => void = cancelAnimationFrame,
5) {
6 let pending: number | null = null;
7 let disposed = false;
8 return {
9 invalidate() {
10 if (disposed || pending !== null) return;
11 pending = request(() => {
12 pending = null;
13 if (!disposed) render();
14 });
15 },
16 dispose() {
17 disposed = true;
18 if (pending !== null) cancel(pending);
19 pending = null;
20 },
21 };