From 83a814c38676e6f9121d7557b5c0a1c48898d3d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=8C=E7=B3=96=E5=8C=85=E5=AD=90?= Date: Tue, 28 Apr 2026 22:32:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86vue=E5=AD=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6emit=E4=BA=8B=E4=BB=B6=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot --- src/views/api/aplayer/vue-aplayer.vue | 49 ++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 9 deletions(-) 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 })