diff --git a/engine/core/VideoManager.ts b/engine/core/VideoManager.ts index ccf212f..1812910 100644 --- a/engine/core/VideoManager.ts +++ b/engine/core/VideoManager.ts @@ -7,7 +7,7 @@ export class VideoManager { private activeSlot: 'A' | 'B' = 'A' private crossFadeMs = 300 private onEndCallback: VideoEndCallback | null = null - private onTimeCallback: TimeUpdateCallback | null = null + private onTimeCallbacks: Set = new Set() private currentSrc = '' private preloaded: Map<'A' | 'B', string> = new Map() private switching = false @@ -50,6 +50,7 @@ export class VideoManager { } this.elA = null this.elB = null + this.onTimeCallbacks.clear() } playInitial(src: string, preloadUrls: string[]) { @@ -141,7 +142,11 @@ export class VideoManager { } onTimeUpdate(cb: TimeUpdateCallback) { - this.onTimeCallback = cb + this.onTimeCallbacks.add(cb) + } + + offTimeUpdate(cb: TimeUpdateCallback) { + this.onTimeCallbacks.delete(cb) } private waitReady(el: HTMLVideoElement): Promise { @@ -160,7 +165,8 @@ export class VideoManager { private handleTimeUpdate = () => { if (this.active) { - this.onTimeCallback?.(this.active.currentTime) + const t = this.active.currentTime + this.onTimeCallbacks.forEach((cb) => cb(t)) } } }