In dieser Übung verknüpfst du Audio, CSS-Animation und ein erstes JavaScript-Verhalten. So entsteht eine saubere, reproduzierbare Anleitung für einen hörbaren und interaktiven Abschnitt.
Section anlegen: Erzeuge unterhalb deiner letzten Section in der index.html eine neue Section mit der ID lauschen und einem inner-wrapper.
Animation, Audio und Button einfügen: Nutze diese Grundstruktur mit eindeutigem Audio-Element für JavaScript. Den Dateinamen kannst du frei wählen, wichtig ist nur ein passender src-Pfad.
<section id="lauschen" class="abschnitt">
<div class="inner-wrapper">
<div class="lausch-animation" aria-hidden="true"></div>
<figure>
<audio id="lauschen-audio" src="/audio/mein-gartenklang.mp3" controls></audio>
</figure>
<button type="button" class="button-vollbild" aria-pressed="false">Vollbild</button>
</div>
</section>
HTML
Basisstil für die Fläche: Lege eine sichtbare Animationsfläche an.
.lausch-animation {
width: 100%;
height: 300px;
background-color: #9d8771;
border: var(--rahmen);
}
@keyframes lauschen {
0% { background-color: #9d8771; }
10% { background-color: #7a5f4b; }
20% { background-color: #004e9d; }
30% { background-color: #0a7db8; }
40% { background-color: #1f9d8a; }
50% { background-color: #6cbf57; }
60% { background-color: #d0a63c; }
70% { background-color: #c76b32; }
80% { background-color: #a3474b; }
90% { background-color: #7b4fa3; }
100% { background-color: #bcb1aa; }
}
.lausch-animation.is-playing {
animation: lauschen 10s infinite;
}
.lausch-animation.is-fullscreen {
position: fixed;
inset: 0;
width: 100vw;
height: 100vh;
z-index: 9999;
}
CSS
Verändere Dauer und Reihenfolge der Farben, bis die Wirkung zur Audio-Datei passt.
Animation an Audio koppeln: Beim Abspielen startet die Animation, beim Pausieren stoppt sie.
Vollbild-Button aktivieren: Per Klick wird die Animationsfläche per position: fixed und z-index über das ganze Fenster gelegt. Der echte Browser-Vollbildmodus ist ein optionaler Bonus.
const audio = document.querySelector("#lauschen-audio");
const animation = document.querySelector(".lausch-animation");
const vollbildButton = document.querySelector(".button-vollbild");
if (audio && animation && vollbildButton) {
audio.addEventListener("play", () => {
animation.classList.add("is-playing");
});
audio.addEventListener("pause", () => {
animation.classList.remove("is-playing");
});
audio.addEventListener("ended", () => {
animation.classList.remove("is-playing");
});
vollbildButton.addEventListener("click", async () => {
const istVollbild = animation.classList.toggle("is-fullscreen");
vollbildButton.setAttribute("aria-pressed", String(istVollbild));
vollbildButton.textContent = istVollbild ? "Vollbild verlassen" : "Vollbild";
// Optional: echter Browser-Vollbildmodus als Zusatz
if (!document.fullscreenEnabled) {
return;
}
try {
if (istVollbild && document.fullscreenElement !== animation) {
await animation.requestFullscreen();
}
if (!istVollbild && document.fullscreenElement) {
await document.exitFullscreen();
}
} catch {
// Wenn Fullscreen vom Browser blockiert wird, bleibt das CSS-Overlay aktiv.
}
});
}
JavaScript
Wichtig: Das CSS-Overlay funktioniert immer. Echter Browser-Fullscreen funktioniert nur nach einer direkten Nutzeraktion (z. B. Button-Klick) und kann je nach Browser eingeschränkt sein.
mein-gartenklang.mp3) liegt im Projekt und der Pfad stimmt.