fix: support multiple onTimeUpdate callbacks in VideoManager
Previously onTimeCallback was a single nullable function pointer, so registerEvents()'s store.setVideoTime callback was overwritten by goToScene()'s checkQTE callback, causing videoTime to stay at 0. Changed to a Set to support multiple concurrent listeners.
This commit is contained in:
@@ -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<TimeUpdateCallback> = 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<void> {
|
||||
@@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user