From fa185e9a87652f3209165e5321eca82249d44299 Mon Sep 17 00:00:00 2001 From: Yanzhen Yu Date: Wed, 1 Apr 2026 12:00:00 +0800 Subject: [PATCH] impl apis: play, pause, goto --- src/Controller.svelte | 46 ++++++++++++++++++++++++++++++------------- src/Player.svelte | 9 +++++++++ typings/index.d.ts | 3 +++ 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/src/Controller.svelte b/src/Controller.svelte index 84cb6845..4644ccfb 100644 --- a/src/Controller.svelte +++ b/src/Controller.svelte @@ -112,21 +112,45 @@ export const toggle = () => { switch (playerState) { case 'playing': - replayer.pause(); + pause(); break; case 'paused': - if (finished) { - replayer.play(); - finished = false; - } else { - replayer.play(currentTime); - } + play(); break; default: break; } }; + export const play = () => { + if (playerState !== 'paused') { + return; + } + if (finished) { + replayer.play(); + finished = false; + } else { + replayer.play(currentTime); + } + }; + + export const pause = () => { + if (playerState !== 'playing') { + return; + } + replayer.pause(); + }; + + export const goto = (timeOffset: number) => { + currentTime = timeOffset; + const isPlaying = playerState === 'playing'; + replayer.pause(); + replayer.play(timeOffset); + if (!isPlaying) { + replayer.pause(); + } + }; + const handleProgressClick = (event: MouseEvent) => { if (speedState === 'skipping') { return; @@ -140,13 +164,7 @@ percent = 1; } const timeOffset = meta.totalTime * percent; - currentTime = timeOffset; - const isPlaying = playerState === 'playing'; - replayer.pause(); - replayer.play(timeOffset); - if (!isPlaying) { - replayer.pause(); - } + goto(timeOffset); }; export const setSpeed = (newSpeed: number) => { diff --git a/src/Player.svelte b/src/Player.svelte index 70bca1ed..9b0b793b 100644 --- a/src/Player.svelte +++ b/src/Player.svelte @@ -99,6 +99,15 @@ export const toggleSkipInactive = () => { controller.toggleSkipInactive(); }; + export const play = () => { + controller.play(); + }; + export const pause = () => { + controller.pause(); + }; + export const goto = (timeOffset: number) => { + controller.goto(timeOffset); + }; onMount(() => { // runtime type check diff --git a/typings/index.d.ts b/typings/index.d.ts index 67625dc5..4e83e38b 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -29,4 +29,7 @@ export default class rrwebPlayer { toggle: () => void; setSpeed: (speed: number) => void; toggleSkipInactive: () => void; + play: () => void; + pause: () => void; + goto: (timeOffset: number) => void; }