expose APIs as public API

This commit is contained in:
Yanzhen Yu
2020-08-20 23:18:55 +08:00
parent b3c3947a2d
commit e905467852
4 changed files with 30 additions and 5 deletions

View File

@@ -26,6 +26,7 @@
autoPlay: false, autoPlay: false,
}, },
}); });
window.$c = component;
component.addEventListener('finish', () => console.log('finish')); component.addEventListener('finish', () => console.log('finish'));
</script> </script>
</html> </html>

View File

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

View File

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

3
typings/index.d.ts vendored
View File

@@ -20,4 +20,7 @@ export default class rrwebPlayer {
addEventListener(event: string, handler: () => unknown): void; addEventListener(event: string, handler: () => unknown): void;
addEvent(event: eventWithTime): void; addEvent(event: eventWithTime): void;
toggle: () => void;
setSpeed: (speed: number) => void;
toggleSkipInactive: () => void;
} }