35
common/resources/client/utils/dom/create-ref-loop.ts
Executable file
35
common/resources/client/utils/dom/create-ref-loop.ts
Executable file
@@ -0,0 +1,35 @@
|
||||
export function createRafLoop(callback: () => void) {
|
||||
let id: number | undefined;
|
||||
|
||||
function start() {
|
||||
// Time updates are already in progress.
|
||||
if (!isUndefined(id)) return;
|
||||
loop();
|
||||
}
|
||||
|
||||
function loop() {
|
||||
id = window.requestAnimationFrame(function rafLoop() {
|
||||
if (isUndefined(id)) return;
|
||||
callback();
|
||||
loop();
|
||||
});
|
||||
}
|
||||
|
||||
function stop() {
|
||||
if (isNumber(id)) window.cancelAnimationFrame(id);
|
||||
id = undefined;
|
||||
}
|
||||
|
||||
return {
|
||||
start,
|
||||
stop,
|
||||
};
|
||||
}
|
||||
|
||||
function isUndefined(value: unknown): value is undefined {
|
||||
return typeof value === 'undefined';
|
||||
}
|
||||
|
||||
function isNumber(value: any): value is number {
|
||||
return typeof value === 'number' && !Number.isNaN(value);
|
||||
}
|
||||
Reference in New Issue
Block a user