From 87ca0836b1b68dbd5c7da8e974ec18662e0812ae Mon Sep 17 00:00:00 2001 From: alger Date: Thu, 16 Jan 2025 00:40:44 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix:=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=8D=95=E6=9B=B2=E5=BE=AA=E7=8E=AF=E5=90=8E=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E6=AD=8C=E8=AF=8D=E5=BF=AB=E8=BF=9B=E4=BC=9A=E6=9C=89=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E7=9A=84=E5=A3=B0=E9=9F=B3=E6=92=AD=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/hooks/MusicHook.ts | 19 +++++++++++++++++-- src/renderer/services/audioService.ts | 4 ++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/renderer/hooks/MusicHook.ts b/src/renderer/hooks/MusicHook.ts index e382cc3..c09ca76 100644 --- a/src/renderer/hooks/MusicHook.ts +++ b/src/renderer/hooks/MusicHook.ts @@ -72,9 +72,13 @@ watch( const setupAudioListeners = () => { let interval: any = null; + // 清理所有事件监听器 + audioService.clearAllListeners(); + // 监听播放 audioService.on('play', () => { store.commit('setPlayMusic', true); + if (interval) clearInterval(interval); interval = setInterval(() => { nowTime.value = sound.value?.seek() as number; allTime.value = sound.value?.duration() as number; @@ -95,7 +99,10 @@ const setupAudioListeners = () => { // 监听暂停 audioService.on('pause', () => { store.commit('setPlayMusic', false); - clearInterval(interval); + if (interval) { + clearInterval(interval); + interval = null; + } if (isElectron && isLyricWindowOpen.value) { sendLyricToWin(); } @@ -103,9 +110,17 @@ const setupAudioListeners = () => { // 监听结束 audioService.on('end', () => { + if (interval) { + clearInterval(interval); + interval = null; + } + if (store.state.playMode === 1) { // 单曲循环模式 - sound.value?.play(); + if (sound.value) { + sound.value.seek(0); + sound.value.play(); + } } else if (store.state.playMode === 2) { // 随机播放模式 const { playList } = store.state; diff --git a/src/renderer/services/audioService.ts b/src/renderer/services/audioService.ts index f5f2141..4482971 100644 --- a/src/renderer/services/audioService.ts +++ b/src/renderer/services/audioService.ts @@ -202,6 +202,10 @@ class AudioService { this.updateMediaSessionPositionState(); } } + + clearAllListeners() { + this.callbacks = {}; + } } export const audioService = new AudioService();