interface RulerStyleConfig { bgColor?: string; textColor?: string; lineColor?: string; } interface IRulerConfig { container: string | HTMLElement; canvas: string | HTMLCanvasElement; indicator: string | HTMLElement; fps?: number; scale?: number; duration?: number; currentTime?: number; containerScale?: number; style?: RulerStyleConfig; onInit?: () => void; onScale?: (scale: number) => void; onSeek?: (time: number) => void; onUITimeChange?: (time: number) => void; } type ScaleLevel = { step: number; group: number; criticalW: number; }; declare class Ruler { readonly config: IRulerConfig; static instance: Ruler; dpr: number; fps: number; scaleLevel: ScaleLevel[]; private container; private canvas; private indicator; private ctx; minScale: number; maxScale: number; private scale; private containerScale; private currentFrame; private totalFrames; private timePerFrame; private viewportStart; private viewportWidth; private scaleLevelIdx; private basePixelPerFrame; private isMouseDown; private renderRequestId; constructor(config: IRulerConfig); static getInstance(config: IRulerConfig): Ruler; private initEvents; private initCanvas; private handleResize; private updateScaleLevel; private updateBasePixelPerFrame; private initScaleLevel; preFrame(): void; nextFrame(): void; fit(): void; frameToPixel(frame: number): number; pixelToFrame(pixel: number): number; timeToPixel(time: number): number; pixelToTime(pixel: number): number; private getValidateScale; setScale(scale: number): void; setCurrentTime(time: number): void; setDuration(duration: number): void; private scheduleRender; private render; private formatTime; /** * 处理指针移动 */ private handleIndicatorMove; /** * 根据鼠标位置计算currentTime */ private handleCurTimeOfMousePos; /** * 处理容器点击 */ private handleContainerClick; private handleOnSeek; /** * 处理滚动 */ private handleScroll; /** * 处理缩放 */ private handleWheel; getBasePixelPerMs(): number; /** * 更新容器的缩放比例 */ updateContainerScale(scale: number): void; } export { Ruler }; export type { IRulerConfig, RulerStyleConfig };