diff --git a/views/launcher.ejs b/views/launcher.ejs index 7e44812..a716cec 100644 --- a/views/launcher.ejs +++ b/views/launcher.ejs @@ -492,17 +492,26 @@ const vol = document.getElementById("music-volume"); let muted = localStorage.getItem("dok_muted") === "true"; + let started = false; // โ† merkt sich, ob Wiedergabe schon lief + if (localStorage.getItem("dok_vol") !== null) vol.value = localStorage.getItem("dok_vol"); audio.volume = parseFloat(vol.value); - // Playlist mischen und von vorne durchspielen let index = 0; const shuffled = [...playlist].sort(() => Math.random() - 0.5); function playTrack(i) { audio.src = shuffled[i]; - if (!muted) audio.play().catch(() => {}); + audio.muted = muted; + if (!muted) { + audio + .play() + .then(() => { + started = true; + }) + .catch(() => {}); + } } audio.addEventListener("ended", () => { @@ -513,8 +522,18 @@ function applyMute() { audio.muted = muted; muteBtn.textContent = muted ? "๐Ÿ”‡" : "๐Ÿ”Š"; - if (!muted && audio.paused) audio.play().catch(() => {}); localStorage.setItem("dok_muted", muted); + + // Wenn gerade nicht stumm, aber Audio pausiert โ†’ starten/fortsetzen + if (!muted) { + if (!audio.src) playTrack(index); + audio + .play() + .then(() => { + started = true; + }) + .catch(() => {}); + } } muteBtn.addEventListener("click", () => { @@ -532,16 +551,25 @@ muteBtn.textContent = parseFloat(vol.value) === 0 ? "๐Ÿ”‡" : "๐Ÿ”Š"; }); - // Erster Start beim ersten Klick (Browser-Autoplay-Sperre) + // Track laden (noch kein play() โ€“ Browser erlaubt das vor Interaktion nicht) playTrack(0); applyMute(); - document.addEventListener( - "click", - () => { - if (!muted && audio.paused) audio.play().catch(() => {}); - }, - { once: true }, - ); + + // Bei JEDER Interaktion prรผfen, ob Audio noch nicht lรคuft โ†’ nachholen + // (kein { once: true } mehr, schadet aber kaum da der Check schnell ist) + function tryResume() { + if (!muted && (audio.paused || !started)) { + audio + .play() + .then(() => { + started = true; + }) + .catch(() => {}); + } + } + document.addEventListener("click", tryResume); + document.addEventListener("keydown", tryResume); + document.addEventListener("pointerdown", tryResume); })();