diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2021-03-17 18:11:26 +0100 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2021-03-17 18:11:26 +0100 |
| commit | d165a0727e42349d935ab3ee287242f1e5029742 (patch) | |
| tree | b4fa68209127efdd4eb46c82eaef280535692611 /frontend/site/audio/audio.player.js | |
| parent | 92566ba17f5e921d5bff1f3fb4e4b0d92ca4fd39 (diff) | |
frontend. export/view button. interactivity sanity check
Diffstat (limited to 'frontend/site/audio/audio.player.js')
| -rw-r--r-- | frontend/site/audio/audio.player.js | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/frontend/site/audio/audio.player.js b/frontend/site/audio/audio.player.js new file mode 100644 index 0000000..9a2d783 --- /dev/null +++ b/frontend/site/audio/audio.player.js @@ -0,0 +1,43 @@ +export default class AudioPlayer { + players = {} + + play({ item, restart, loop }) { + return new Promise((resolve, reject) => { + const { id, url } = item + if (id in players) { + if (restart) { + players[id].currentTime = 0 + players[id].play() + return resolve() + } + return reject() + } + const player = document.createElement('audio') + const handleEnded = () => { + unbind() + resolve() + } + const handleError = (error) => { + console.error(error) + unbind() + reject(error) + } + const bind = () => { + player.addEventListener('ended', handleEnded) + player.addEventListener('error', handleError) + this.players[id] = player + } + const unbind = () => { + player.removeEventListener('ended', handleEnded) + player.removeEventListener('error', handleError) + delete this.players[id] + } + const start = () => { + player.src = url + player.play() + } + bind() + start() + }) + } +} |
