--- marp: true theme: gaia paginate: true backgroundColor: #fff header: "Grundlagen IT- und Internettechnik" footer: "Michael Czechowski – HdM Stuttgart – WS 2025/26" title: "Tag 3: Interaktivität & JavaScript" ---  # Grundlagen IT- und Internettechnik **223015b** · Modul "Technik 1" · 1. Semester Digital- und Medienwirtschaft Hochschule der Medien Stuttgart **Wintersemester 2025/26** --- # Tag 3 – 24.01.2026 ## Interaktivität & JavaScript --- # Rückblick **Tag 1:** Geschichte, Von-Neumann, HTML **Tag 2:** Netzwerke, DNS, HTTP, CSS **Eure Portfolio-Seiten?** - Wer hat mehrere Seiten? - Wer hat ein Kontaktformular? - Wer hat responsive Design? --- # Heute **Vormittag:** - Was ist JavaScript? - Variablen, Datentypen, Operatoren - Funktionen & Kontrollstrukturen **Nachmittag:** - Das DOM: HTML mit JS manipulieren - Events: Auf NutzerInnen reagieren - Projekt: Interaktive Webseite --- # Teil 1: JavaScript-Grundlagen ## Die Sprache des Webs --- # Was ist JavaScript? **Die einzige Programmiersprache, die im Browser läuft!** - **1995:** In 10 Tagen entwickelt (Brendan Eich, Netscape) - **Heute:** Überall – Browser, Server, Apps, IoT **Nicht verwechseln:** - Java ≠ JavaScript (komplett unterschiedlich!) - "JavaScript ist zu Java wie Carpet zu Car" --- # JavaScript-Timeline | Jahr | Meilenstein | |------|-------------| | **1995** | JavaScript erfunden (Netscape) | | **1997** | ECMAScript-Standard (ECMA-262) | | **2005** | AJAX revolutioniert Web (Gmail, Google Maps) | | **2008** | V8 Engine (Chrome) – JS wird schnell | | **2009** | Node.js – JS auf dem Server | | **2015** | ES6 – Modernes JavaScript | --- # JavaScript einbinden **Option 1: Externe Datei (empfohlen!)** ```html
``` **Option 2: Inline** ```html ``` ⚠️ Script am **Ende** des `` – damit HTML zuerst lädt! --- # Die Konsole: Euer bester Freund **Browser DevTools → Console** - Windows/Linux: `F12` oder `Strg+Shift+I` - Mac: `Cmd+Option+I` ```javascript console.log("Hallo Welt!"); console.log(42); console.log("Die Antwort ist:", 42); ``` **Direkt in der Konsole tippen und Enter!** --- # Variablen: Daten speichern ```javascript // Modern (empfohlen) let alter = 25; // Kann geändert werden const name = "Max"; // Konstante (nicht änderbar) // Alt (vermeiden!) var stadt = "Stuttgart"; // Problematisches Scoping ``` **Regeln:** - Beginnt mit Buchstabe, `_` oder `$` - Keine Leerzeichen, keine Sonderzeichen - Case-sensitive: `name` ≠ `Name` --- # Datentypen ```javascript // String (Text) const text = "Hallo"; const text2 = 'Welt'; const text3 = `Hallo ${text2}`; // Template Literal // Number (Zahl) const ganzzahl = 42; const kommazahl = 3.14; // Boolean (Wahrheitswert) const istWahr = true; const istFalsch = false; // Undefined & Null let unbekannt; // undefined const nichts = null; // null (bewusst leer) ``` --- # Arrays: Listen ```javascript const farben = ["rot", "grün", "blau"]; // Zugriff (0-basiert!) console.log(farben[0]); // "rot" console.log(farben[2]); // "blau" // Länge console.log(farben.length); // 3 // Hinzufügen farben.push("gelb"); // Am Ende farben.unshift("weiß"); // Am Anfang // Entfernen farben.pop(); // Letztes Element farben.shift(); // Erstes Element ``` --- # Objects: Strukturierte Daten ```javascript const person = { vorname: "Max", nachname: "Mustermann", alter: 25, hobbies: ["Lesen", "Sport"] }; // Zugriff console.log(person.vorname); // "Max" console.log(person["nachname"]); // "Mustermann" // Ändern person.alter = 26; // Hinzufügen person.beruf = "Student"; ``` --- # Operatoren ```javascript // Arithmetik 5 + 3 // 8 (Addition) 5 - 3 // 2 (Subtraktion) 5 * 3 // 15 (Multiplikation) 5 / 3 // 1.666... (Division) 5 % 3 // 2 (Modulo/Rest) 5 ** 3 // 125 (Potenz) // Vergleich 5 === 3 // false (strikt gleich) 5 !== 3 // true (strikt ungleich) 5 > 3 // true 5 >= 3 // true // Logisch true && false // false (UND) true || false // true (ODER) !true // false (NICHT) ``` --- # Hands-On: Variablen & Konsole (20 Min) **In der Browser-Konsole:** 1. Erstelle Variablen für dich: ```javascript const name = "Dein Name"; let alter = 20; const hobbies = ["Hobby1", "Hobby2"]; ``` 2. Gib sie aus: ```javascript console.log(`Ich bin ${name}, ${alter} Jahre alt.`); console.log("Meine Hobbies:", hobbies); ``` 3. Erstelle ein `person`-Objekt und greife auf Properties zu --- # Funktionen: Code wiederverwenden ```javascript // Funktion definieren function grüßen(name) { return `Hallo ${name}!`; } // Funktion aufrufen const nachricht = grüßen("Max"); console.log(nachricht); // "Hallo Max!" // Arrow Function (modern) const addieren = (a, b) => { return a + b; }; // Kurzform (bei einem Ausdruck) const verdoppeln = x => x * 2; ``` --- # Kontrollstrukturen: if/else ```javascript const alter = 18; if (alter >= 18) { console.log("Volljährig"); } else if (alter >= 16) { console.log("Fast volljährig"); } else { console.log("Minderjährig"); } // Ternärer Operator (Kurzform) const status = alter >= 18 ? "Erwachsen" : "Kind"; ``` --- # Schleifen: Wiederholen ```javascript // for-Schleife for (let i = 0; i < 5; i++) { console.log(i); // 0, 1, 2, 3, 4 } // for...of (Arrays) const farben = ["rot", "grün", "blau"]; for (const farbe of farben) { console.log(farbe); } // forEach (Array-Methode) farben.forEach(farbe => { console.log(farbe); }); // while let count = 0; while (count < 3) { console.log(count); count++; } ``` --- # Nützliche Array-Methoden ```javascript const zahlen = [1, 2, 3, 4, 5]; // map: Transformieren const verdoppelt = zahlen.map(x => x * 2); // [2, 4, 6, 8, 10] // filter: Filtern const groß = zahlen.filter(x => x > 2); // [3, 4, 5] // find: Erstes Element finden const gefunden = zahlen.find(x => x > 3); // 4 // reduce: Aggregieren const summe = zahlen.reduce((acc, x) => acc + x, 0); // 15 ``` --- # Hands-On: Funktionen & Schleifen (30 Min) **Erstellt `script.js`:** 1. Funktion die prüft ob Zahl gerade ist: ```javascript function istGerade(zahl) { // Dein Code } ``` 2. Funktion die Array-Summe berechnet 3. Schleife die 1-10 ausgibt und "Fizz" für durch 3 teilbare, "Buzz" für durch 5 teilbare Zahlen **Tipp:** `zahl % 2 === 0` prüft ob gerade --- # Pause ## 15 Minuten --- # Teil 2: Das DOM ## HTML mit JavaScript manipulieren --- # Was ist das DOM? **D**ocument **O**bject **M**odel - Browser parst HTML → Baumstruktur - JavaScript kann diesen Baum **lesen und ändern** - Jedes HTML-Element = ein "Node" ``` document └── html ├── head │ └── title └── body ├── h1 └── p ``` --- # Elemente finden ```javascript // Einzelnes Element (erstes gefundene) document.getElementById("meinId"); document.querySelector(".meineKlasse"); document.querySelector("nav > a"); // Mehrere Elemente (NodeList) document.getElementsByClassName("meineKlasse"); document.querySelectorAll("p"); // Beispiel const titel = document.querySelector("h1"); console.log(titel.textContent); // Text auslesen ``` --- # Elemente manipulieren ```javascript const element = document.querySelector("#meinElement"); // Text ändern element.textContent = "Neuer Text"; element.innerHTML = "HTML möglich"; // Attribute ändern element.setAttribute("class", "neu"); element.id = "neueId"; element.href = "https://example.com"; // Styles ändern element.style.color = "red"; element.style.backgroundColor = "blue"; element.style.display = "none"; // Verstecken ``` --- # Klassen manipulieren ```javascript const element = document.querySelector(".box"); // Klasse hinzufügen element.classList.add("aktiv"); // Klasse entfernen element.classList.remove("inaktiv"); // Klasse umschalten element.classList.toggle("sichtbar"); // Klasse prüfen if (element.classList.contains("aktiv")) { console.log("Element ist aktiv"); } ``` --- # Elemente erstellen ```javascript // Neues Element erstellen const neuerAbsatz = document.createElement("p"); neuerAbsatz.textContent = "Ich bin neu!"; neuerAbsatz.classList.add("highlight"); // In DOM einfügen const container = document.querySelector("#container"); container.appendChild(neuerAbsatz); // Am Ende container.prepend(neuerAbsatz); // Am Anfang container.insertBefore(neuerAbsatz, anderesElement); // Element entfernen neuerAbsatz.remove(); ``` --- # Hands-On: DOM manipulieren (30 Min) **HTML:** ```html