From 277d8e801bde328836c2e539c23f7a2e1a69e673 Mon Sep 17 00:00:00 2001 From: willianpm Date: Sun, 8 Mar 2026 01:03:52 +0000 Subject: [PATCH 1/2] feat: add mouse wheel support for fullscreen volume control Added event handler to allow adjusting the fullscreen volume using the mouse wheel. Scrolling up unmutes and increases volume, scrolling down decreases volume. Improves user experience for volume adjustments in fullscreen mode. --- js/ui.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/js/ui.js b/js/ui.js index 8fb1cdd..c67168b 100644 --- a/js/ui.js +++ b/js/ui.js @@ -1344,6 +1344,25 @@ export class UIRenderer { updateFsVolumeUI(); }; + const handleFsVolumeWheel = (e) => { + e.preventDefault(); + + const delta = e.deltaY > 0 ? -0.05 : 0.05; + const currentVolume = this.player.userVolume; + const newVolume = Math.max(0, Math.min(1, currentVolume + delta)); + + if (delta > 0 && this.player.muted) { + this.player.setMute(false); + } + + this.player.setVolume(newVolume); + updateFsVolumeUI(); + }; + + [fsVolumeBar, fsVolumeBtn].forEach((el) => + el.addEventListener('wheel', handleFsVolumeWheel, { passive: false }) + ); + const setFsVolume = (e) => { const rect = fsVolumeBar.getBoundingClientRect(); const position = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width)); From 7cf0b3d38602dc7b6970860615cebef1e3d5842a Mon Sep 17 00:00:00 2001 From: willianpm Date: Sun, 8 Mar 2026 02:15:17 +0000 Subject: [PATCH 2/2] fix(ui): prevent duplicate wheel listeners and correct mute handling - Remove stacked wheel event listeners on fullscreen reopen to avoid multiple handler executions. - Replace non-existent Player mute methods with audioPlayer.muted property and localStorage update. - Ensures volume wheel and mute logic work correctly after multiple fullscreen toggles. --- js/ui.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/js/ui.js b/js/ui.js index c67168b..78a0660 100644 --- a/js/ui.js +++ b/js/ui.js @@ -1351,17 +1351,22 @@ export class UIRenderer { const currentVolume = this.player.userVolume; const newVolume = Math.max(0, Math.min(1, currentVolume + delta)); - if (delta > 0 && this.player.muted) { - this.player.setMute(false); + if (delta > 0 && audioPlayer.muted) { + audioPlayer.muted = false; + localStorage.setItem('muted', false); } this.player.setVolume(newVolume); updateFsVolumeUI(); }; - [fsVolumeBar, fsVolumeBtn].forEach((el) => - el.addEventListener('wheel', handleFsVolumeWheel, { passive: false }) - ); + [fsVolumeBar, fsVolumeBtn].forEach((el) => { + if (el._fsVolumeWheelHandler) { + el.removeEventListener('wheel', el._fsVolumeWheelHandler); + } + el._fsVolumeWheelHandler = handleFsVolumeWheel; + el.addEventListener('wheel', handleFsVolumeWheel, { passive: false }); + }); const setFsVolume = (e) => { const rect = fsVolumeBar.getBoundingClientRect();