← Niveau 2 – Troldmand

Lektion 8 af 8 ⏱ 60 minutter

Stor udfordring: bring hele din hjemmeside til live

Den endelige mission i niveau 2. Alle trylleformularer på én gang – plus et par nye idéer oveni.

Din mission

Denne gang er der ikke nyt materiale. Du får en liste over opgaver, og du ved allerede alt, hvad du skal bruge til dem. Præcis sådan ser en rigtig udviklers arbejde ud: du får et sæt krav og samler dem af ting, du allerede kender.

Påkrævet del 🎯

Gå igennem din hjemmeside og sørg for, at alle fem trylleformularer fra dette niveau er i live på den:

  1. Scriptet forbundet på hver side og ingen fejl i konsollen (F12 – intet rødt bør vises).
  2. Mørk tilstand – en kontakt i headeren på hver side, og valget huskes.
  3. En interaktiv knap eller tæller – mindst én trylleformular med en variabel og en betingelse.
  4. Et fotogalleri med lightbox – et klik gør et foto større.
  5. En quiz eller en formular med validering – mindst én af disse. Du må gerne lave begge!

Valgfrie udvidelser 🌟

Vælg mindst én (eller find på din egen):

Hilsen baseret på tid på dagen

Hjemmesiden hilser forskelligt om morgenen og om aftenen:

<p id="day-greeting"></p>
const dayGreeting = document.getElementById("day-greeting");
const hour = new Date().getHours();

if (hour < 9) {
  dayGreeting.textContent = "Good morning! ☀️";
} else if (hour < 18) {
  dayGreeting.textContent = "Hi there, have a nice day!";
} else {
  dayGreeting.textContent = "Good evening! 🌙";
}

new Date() returnerer den aktuelle dato og tid, .getHours() henter timen ud af den.

Tilfældig besked ved klik

En anden joke, turidé eller holdsang hver gang:

const messages = [
  "Practice makes perfect!",
  "Let's go, Eagles! 🦅",
  "You miss every shot you don't take.",
  "Fans are the twelfth player.",
];

const messageButton = document.getElementById("message-button");
const messageEl = document.getElementById("message");

messageButton.addEventListener("click", () => {
  const random = Math.floor(Math.random() * messages.length);
  messageEl.textContent = messages[random];
});

Math.random() returnerer et tilfældigt tal mellem 0 og 1, og resten af linjen gør det til en tilfældig position i arrayet.

Besøgstæller (kun til dig)

Hvor mange gange har du åbnet din hjemmeside? Gem det i localStorage:

let visits = Number(localStorage.getItem("visits") ?? 0);
visits++;
localStorage.setItem("visits", visits);
console.log("You've opened this page " + visits + " times now");

Number(...) konverterer tekst fra hukommelsen til et tal, og ?? 0 betyder “hvis der ikke er noget, start fra nul.”

Sammenklappelig sektion (accordion)

Skjul en lang menu eller trup under en klikbar overskrift:

const sectionHeading = document.getElementById("expand-heading");
const sectionContent = document.getElementById("expand-content");

sectionHeading.addEventListener("click", () => {
  sectionContent.classList.toggle("hidden");
});

Du har allerede .hidden { display: none !important; }-klassen fra gallerilektionen.

Upload den nye version til internettet

Din hjemmeside på GitHub Pages er stadig den gamle version fra niveau 1! Upload den nye:

  1. Åbn dit repository på github.com,
  2. Add file → Upload files,
  3. træk de ændrede filer ind (især script.js, style.css og alle .html-filerne) og klik på Commit changes.

Inden for et minut kører dine trylleformularer for alle at se.

Tillykke, Troldmand! 🪄 Din hjemmeside er ikke bare pæn længere – den er levende. Den reagerer på klik, husker valg, stiller spørgsmål og svarer på dem. Og du ved, hvordan hver eneste linje virker. I Niveau 3 – Mester lærer du at bygge hjemmesider som professionelle: React, komponenter og din egen server.

Det tager du med fra dette niveau

🏆 Dit diplom

Finale for Troldmand

Når du har sat flueben ved alle lektioner, kan du printe et certifikat.