scrollcat
Version:
I want to catch the best scene of my life. The browser wants to, too.
68 lines (62 loc) • 2.15 kB
TypeScript
interface Deferred<T> extends Promise<T> {
readonly state: "pending" | "fulfilled" | "rejected";
resolve(value?: T | PromiseLike<T>): void;
reject(reason?: any): void;
}
declare class Queue<T> {
#private;
constructor(limit?: number);
[Symbol.asyncIterator](): AsyncIterableIterator<T>;
pop(): Deferred<T>;
push(data: T): void;
refresh(): void;
destroy(): void;
}
declare type Percent = `${number}%`;
declare type SceneState = "before" | "after" | "during";
declare type SceneEventType = "update" | "enter" | "leave";
declare type SceneEvent = {
target: HTMLElement;
progress: number;
scrollTop: number;
};
declare type SceneEmitter = Queue<[SceneEventType, SceneEvent]>;
interface SceneConfig {
play: number | Percent;
duration: number | Percent;
}
declare const DefaultSceneConfig: SceneConfig;
declare class Scene {
#private;
isActive: boolean;
duration: number;
get emitter(): SceneEmitter;
get scrollTop(): number;
get progress(): number;
get state(): SceneState;
constructor(scroller: Scroller, el: HTMLElement, cfg: SceneConfig);
update(): void;
removeSelf(): void;
scrollTo(n: Percent | number, cfg?: ScrollOptions): void;
on(eventType: SceneEventType, cb: (ev: SceneEvent) => void): void;
off(eventType: SceneEventType, cb?: (ev: SceneEvent) => void): void;
once(eventType: SceneEventType, cb: (ev: SceneEvent) => void): void;
}
declare type ScrollDirection = "forward" | "reverse" | "paused";
declare class Scroller {
#private;
scrollTop?: number;
direction?: ScrollDirection;
get clientHeight(): number;
get locked(): boolean;
get el(): HTMLElement;
destroy: () => void;
constructor(el?: HTMLElement);
addScene(el: HTMLElement, cfg: SceneConfig): Scene;
addSceneWithDefault(el: HTMLElement): Scene;
removeScene(scene: Scene): void;
scrollTo(n: Percent | number, cfg?: ScrollOptions): void;
lock(duration?: number): Promise<void>;
unlock(): void;
}
export { DefaultSceneConfig, Scene, SceneConfig, SceneEmitter, SceneEvent, SceneEventType, SceneState, Scroller };