@realsee/five
Version:
Realsee Renderer SDK
46 lines (45 loc) • 1.75 kB
TypeScript
export type RequestAnimationFrameArgs<Args extends any[] = any[]> = [domHighResTimeStamp: number, ...args: Args];
export interface AnimationFrameContext<Args extends any[] = any[], RequestId = any> {
requestAnimationFrame(fn: (...args: RequestAnimationFrameArgs<Args>) => void): RequestId;
cancelAnimationFrame(requestId: RequestId): void;
}
export type AnimationFrameLoopType = 'raf' | 'sto';
interface AnimationFrame {
callback: (time: number, deltaTime: number, ...requestAnimationFrameArgs: RequestAnimationFrameArgs) => void;
once: boolean;
delay: number;
order: number;
calls: number;
}
declare class AnimationFrameLoop {
private frames;
private loopType;
private isAnimating;
private context;
private requestId;
private loop;
private static sharedInstance?;
static get shared(): AnimationFrameLoop;
static getFrameTime(): number;
constructor();
start(): void;
stop(): void;
setContext(context: AnimationFrameContext | null): void;
getContext<T extends AnimationFrameContext = AnimationFrameContext>(): T | null;
setLoopType(type: AnimationFrameLoopType): void;
getLoopType(): AnimationFrameLoopType;
private requestAnimationFrame;
private cancelAnimationFrame;
private remove;
/**
* 添加到动画循环
* @param callback - 动画循环回调
* @param once - 是否只回调一次
* @param delay - 延迟多少个动画循环回调
* @param order - 优先级,数字越小越早被调用
* @returns 移除动画循环函数
*/
add(callback: AnimationFrame["callback"], once?: boolean, delay?: number, order?: number): () => void;
clear(): void;
}
export { AnimationFrameLoop, AnimationFrame };