From b9a8ca7ae46b6e3c67c27113694fd13073f02fc1 Mon Sep 17 00:00:00 2001 From: Astrian Zheng Date: Wed, 28 May 2025 11:30:12 +1000 Subject: [PATCH] feat(Player, Playroom): add volume control functionality with persistent settings --- src/components/Player.vue | 51 ++++++++++++++++- src/pages/Playroom.vue | 115 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 160 insertions(+), 6 deletions(-) diff --git a/src/components/Player.vue b/src/components/Player.vue index 1c665df..3e0d03b 100644 --- a/src/components/Player.vue +++ b/src/components/Player.vue @@ -236,6 +236,11 @@ watch(() => playQueueStore.list.length, async (newLength) => { setTimeout(() => { playQueueStore.preloadNext() }, 2000) + + // 初始化音量 + if (player.value) { + initializeVolume() + } }) // 监听音频元素变化 @@ -303,6 +308,48 @@ function getCurrentTrack() { return currentTrack.value } +// 初始化音量 +function initializeVolume() { + if (player.value) { + const savedVolume = localStorage.getItem('audioVolume') + if (savedVolume) { + const volumeValue = parseFloat(savedVolume) + player.value.volume = volumeValue + console.log('[Player] 初始化音量:', volumeValue) + } else { + // 设置默认音量 + player.value.volume = 1 + localStorage.setItem('audioVolume', '1') + } + } +} + +// 监听音量变化事件 +function handleVolumeChange(event: Event) { + const target = event.target as HTMLAudioElement + if (target) { + // 保存音量变化到localStorage + localStorage.setItem('audioVolume', target.volume.toString()) + console.log('[Player] 音量变化:', target.volume) + } +} + +// 监听localStorage中音量的变化,同步到音频元素 +function syncVolumeFromStorage() { + if (player.value) { + const savedVolume = localStorage.getItem('audioVolume') + if (savedVolume) { + const volumeValue = parseFloat(savedVolume) + if (player.value.volume !== volumeValue) { + player.value.volume = volumeValue + } + } + } +} + +// 定期检查音量同步(可选,或者使用storage事件) +setInterval(syncVolumeFromStorage, 100) + // 组件卸载时清理预加载 // onUnmounted(() => { // playQueueStore.clearAllPreloadedAudio() @@ -312,16 +359,18 @@ function getCurrentTrack() {