expose APIs as public API

This commit is contained in:
Yanzhen Yu
2026-04-01 12:00:00 +08:00
parent ab3f0f0844
commit 50e2555d1e
4 changed files with 30 additions and 5 deletions

View File

@@ -102,7 +102,7 @@
}
};
const toggle = () => {
export const toggle = () => {
switch (playerState) {
case 'playing':
replayer.pause();
@@ -142,7 +142,7 @@
}
};
const setSpeed = (newSpeed: number) => {
export const setSpeed = (newSpeed: number) => {
let needFreeze = playerState === 'playing';
speed = newSpeed;
if (needFreeze) {
@@ -154,6 +154,10 @@
}
};
export const toggleSkipInactive = () => {
skipInactive = !skipInactive;
};
onMount(() => {
playerState = replayer.service.state.value as typeof playerState;
speedState = replayer.speedService.state.value as typeof speedState;
@@ -320,7 +324,7 @@
</div>
<div class="rr-controller__btns">
<button on:click={toggle}>
{#if ['playing', 'skipping'].includes(playerState)}
{#if playerState === 'playing'}
<svg
class="icon"
viewBox="0 0 1024 1024"

View File

@@ -32,6 +32,11 @@
let fullscreenListener: undefined | (() => void);
let _width: number = width;
let _height: number = height;
let controller: {
toggle: () => void;
setSpeed: (speed: number) => void;
toggleSkipInactive: () => void;
};
let style: string;
$: style = inlineCss({
@@ -54,7 +59,7 @@
`scale(${Math.min(widthScale, heightScale)})` + 'translate(-50%, -50%)';
};
const fullscreen = () => {
export const toggleFullscreen = () => {
if (player) {
isFullscreen() ? exitFullscreen() : openFullscreen(player);
}
@@ -68,6 +73,17 @@
replayer.addEvent(event);
};
// by pass controller methods as public API
export const toggle = () => {
controller.toggle();
};
export const setSpeed = (speed: number) => {
controller.setSpeed(speed);
};
export const toggleSkipInactive = () => {
controller.toggleSkipInactive();
};
onMount(() => {
// runtime type check
if (speedOption !== undefined && typeOf(speedOption) !== 'array') {
@@ -167,12 +183,13 @@
<div class="rr-player__frame" bind:this={frame} {style} />
{#if replayer}
<Controller
bind:this={controller}
{replayer}
{showController}
{autoPlay}
{speedOption}
{skipInactive}
{tags}
on:fullscreen={() => fullscreen()} />
on:fullscreen={() => toggleFullscreen()} />
{/if}
</div>