diff --git a/src/views/api/aplayer/vue-aplayer.vue b/src/views/api/aplayer/vue-aplayer.vue index dd574b1..db2ef32 100644 --- a/src/views/api/aplayer/vue-aplayer.vue +++ b/src/views/api/aplayer/vue-aplayer.vue @@ -122,6 +122,8 @@ const MEDIA_EVENTS = [ 'waiting', ] as const +type MediaEventName = typeof MEDIA_EVENTS[number] + let activeMutex: PlayerExpose | null = null const props = defineProps({ @@ -186,14 +188,39 @@ const props = defineProps({ }, }) -const emit = defineEmits<{ - (event: 'update:music', value: PlayerMusicItem): void - (event: 'update:muted', value: boolean): void - (event: 'update:volume', value: number): void - (event: 'update:shuffle', value: boolean): void - (event: 'update:repeat', value: RepeatValue): void - (event: string, payload?: Event): void -}>() +const emit = defineEmits([ + 'update:music', + 'update:muted', + 'update:volume', + 'update:shuffle', + 'update:repeat', + 'abort', + 'canplay', + 'canplaythrough', + 'durationchange', + 'emptied', + 'encrypted', + 'ended', + 'error', + 'interruptbegin', + 'interruptend', + 'loadeddata', + 'loadedmetadata', + 'loadstart', + 'mozaudioavailable', + 'pause', + 'play', + 'playing', + 'progress', + 'ratechange', + 'seeked', + 'seeking', + 'stalled', + 'suspend', + 'timeupdate', + 'volumechange', + 'waiting', +] as const) const audio = ref(null) const internalMusic = ref(props.music) @@ -562,7 +589,7 @@ function initAudio() { media.volume = props.volume MEDIA_EVENTS.forEach((eventName) => { - media.addEventListener(eventName, (event) => emit(eventName, event)) + media.addEventListener(eventName, (event) => emitMediaEvent(eventName, event)) }) media.addEventListener('play', onAudioPlay) @@ -585,6 +612,10 @@ function setSelfAdaptingTheme(color: string | null) { selfAdaptingTheme.value = color } +function emitMediaEvent(eventName: T, event: Event) { + emit(eventName, event) +} + watch(() => props.music, (music) => { internalMusic.value = music })