bogen-treu nach docs/223015c/03-interaktivitaet-javascript-bogen.md: - 2 leads: kapitel-intro, 'statisch ist langweilig' - was-kann-JS-tabelle (mit sicherheits-grenzen erklärung), JS-timeline (1995 brendan eich → 2009 node → 2015 ES6 → heute TS) - JS einbinden (external/inline/module), js-console demo reuse - variablen (let/const/var, const default), datentypen (6 grundtypen + arrays/objects) - js-arrays + js-objects demo reuse, funktionen (declaration + arrow) - js-loops demo reuse, kontrollstrukturen (if/else, ternär, switch) - DOM lead, dom-tree demo reuse, querySelector (CSS-selektoren wiederverwendbar) - js-manipulate demo reuse (textContent/innerHTML/setAttribute/classList) - js-create demo reuse (createElement/appendChild/remove) - events lead, js-event-listener demo reuse, häufige-events-tabelle (click/input/submit/keydown/load/DOMContentLoaded) - js-preventdefault demo reuse, js-darkmode demo reuse, js-todo demo reuse, js-fetch demo reuse, js-localstorage demo reuse - frameworks lead, React/Vue/Angular/Svelte/Astro übersichtstabelle (KEINE logo-galerie), library-vs-framework (inversion of control) - selbstlernen mini-projekt (dark-mode / to-do / API), zusammenfassung des ganzen kurses reuse-demos: js-console, js-arrays, js-objects, js-loops, dom-tree, js-manipulate, js-create, js-event-listener, js-preventdefault, js-darkmode, js-todo, js-fetch, js-localstorage (13 demos reused) no NEU demos in dieser session per klausur-themen-vorschlag: JS NICHT klausurrelevant. lernziele auf verstehen-niveau (kein code-schreiben in klausur). streichungen vs altem 03-interaktivitaet-javascript.md (1050 zeilen, 49 slides): - framework-logo-galerie-folien (react/vue/svelte/astro/webpack/vite/parcel als jeweils eigene folie) → eine übersichts-folie - doppelte 'was kann JS'-folien → eine - lange hands-on-codes als folie → in speaker-notes oder selbstlernen verlinken klausurfolien.md regeneriert: 20 slides (8 aus kap1, 11 aus kap2, 0 aus kap3 → bestätigt JS-nicht-klausurrelevant-design) build geht durch
22 KiB
marp, theme, paginate, backgroundColor, header, footer, title
| marp | theme | paginate | backgroundColor | header | footer | title |
|---|---|---|---|---|---|---|
| true | gaia | true | Grundlagen IT- und Internettechnik (223015c) | Michael Czechowski – HdM Stuttgart – SoSe 2026 | Kapitel 3: Interaktivität & JavaScript |
Kapitel 3
Interaktivität & JavaScript
„Statisch ist langweilig"
Was kann JavaScript?
| Kann | Beispiel |
|---|---|
| DOM ändern | Element-Text, -Klasse, -Inhalt manipulieren |
| Events behandeln | Klick, Tastendruck, Scroll, Submit |
| Daten holen | fetch() API-Anfragen |
| Daten lokal speichern | localStorage, sessionStorage |
| Animationen | requestAnimationFrame, CSS-Animationen triggern |
| Web-APIs nutzen | Geolocation, Camera, Audio, Notification |
Aus Sicherheitsgründen NICHT: willkürlich Dateien auf der Platte lesen/schreiben.
JavaScript-Timeline
| Jahr | Was |
|---|---|
| 1995 | Brendan Eich entwickelt JS in 10 Tagen für Netscape |
| 1997 | ECMAScript-1 standardisiert (offizieller Name) |
| 2009 | Node.js — JS auch außerhalb des Browsers |
| 2015 | ES6 (große Erneuerung: let, const, arrow functions, classes, modules) |
| 2017+ | jährliche Updates (ES2017, ES2018, …) |
| heute | TypeScript als statisch-getypter Aufsatz |
JS ist die am weitesten verbreitete Programmiersprache der Welt.
JavaScript einbinden
<!-- External (best practice) -->
<script src="./app.js"></script>
<!-- Inline (für kleine Snippets) -->
<script>
console.log('Hallo Welt');
</script>
<!-- Modern: als Modul -->
<script type="module" src="./main.js"></script>
Modern: als ES-Modul mit type="module". Erlaubt import / export.
Variablen — Daten speichern
let name = "Ada"; // veränderlich
const PI = 3.14159; // konstant
var alt = "vermeiden"; // pre-ES6, hat skopen-bugs
// Verändern:
name = "Grace"; // OK
PI = 3.0; // FEHLER: const kann nicht überschrieben werden
Faustregel: const als Default. Nur let, wenn man umzuweisen plant. Niemals var.
Datentypen
let text = "Hallo"; // string
let zahl = 42; // number
let ist_an = true; // boolean
let nichts = null; // null
let nicht_gesetzt; // undefined
let liste = [1, 2, 3]; // array
let objekt = { x: 1 }; // object
typeof text // "string"
typeof liste // "object" (auch arrays sind objects)
6 Grund-Typen + objects/arrays.
Funktionen
// Function declaration
function gruessen(name) {
return "Hallo " + name;
}
// Arrow function (modern, kompakt)
const gruessen = (name) => "Hallo " + name;
// Mit mehreren Zeilen
const summe = (a, b) => {
const result = a + b;
return result;
};
gruessen("Ada") // "Hallo Ada"
summe(3, 4) // 7
Kontrollstrukturen
// if / else
if (age >= 18) {
console.log("erwachsen");
} else if (age >= 14) {
console.log("jugendlich");
} else {
console.log("kind");
}
// Ternärer Operator (Kurzform)
const status = age >= 18 ? "erwachsen" : "kind";
// switch (mehrere Werte)
switch (browser) {
case "Chrome": return "Blink";
case "Safari": return "WebKit";
case "Firefox": return "Gecko";
default: return "unknown";
}
Das DOM
HTML im Speicher des Browsers
Elemente finden
// EIN Element (erstes match)
const heading = document.querySelector('h1');
const btn = document.querySelector('#submit-button');
const card = document.querySelector('.card');
// MEHRERE Elemente (NodeList)
const allButtons = document.querySelectorAll('button');
const allCards = document.querySelectorAll('.card');
// Iterieren
allButtons.forEach(btn => console.log(btn.textContent));
querySelector(...) nimmt denselben Selektor wie CSS.
Events
Auf User-Aktionen reagieren
Häufige Events
| Event | Wo | Wann |
|---|---|---|
click |
jedes Element | Maus-Klick |
input |
input, textarea, select | bei jedem Tastendruck |
change |
input, select | wenn Wert verändert (bei blur) |
submit |
form | wenn Form abgeschickt wird |
keydown |
document, input | beim Tastendruck |
scroll |
window, scrollbare Elemente | beim Scrollen |
load |
window | wenn Seite + Resources geladen |
DOMContentLoaded |
document | wenn DOM bereit (vor Bildern) |
Frameworks
Wann braucht man die?
React · Vue · Angular · Svelte
| Framework | Typ | Stärke |
|---|---|---|
| React | Library (mit Ökosystem) | dominierend, große Community |
| Vue | Framework | sanfter Einstieg, gute Doku |
| Angular | Framework | „Enterprise"-Setup, Google |
| Svelte | Compiler | kein Virtual DOM, kleine Bundle |
| Astro | Hybrid | Static-First, Multi-Framework |
Alle: Komponenten als Konzept. State verändert sich → UI re-rendert.
Library vs. Framework
| Library | Framework | |
|---|---|---|
| Wer ruft | du rufst die Library | das Framework ruft dich |
| Beispiel | jQuery, React (offiziell), Lodash | Angular, Vue, Next.js, Astro |
| Vorteil | mehr Freiheit | mehr Struktur |
| Nachteil | mehr Setup-Arbeit | weniger Flexibilität |
„Inversion of Control": Library = du kontrollierst, Framework = es kontrolliert dich.
Selbstlernen — eigenes Mini-Projekt
Wähle eines:
A. Dark-Mode-Toggle — Button auf einer Seite, der dark-Klasse am body togglet. localStorage merkt den Zustand.
B. To-Do-App — Form, das neue Items zur Liste hinzufügt. localStorage für Persistenz.
C. API-Visualisierung — fetch zu jsonplaceholder.typicode.com/users und Daten als Liste rendern.
Bonus: mit GitHub Pages deployen → öffentlich zugängliche URL.
Zusammenfassung
Was JS macht: DOM manipulieren · Events behandeln · Daten holen + speichern.
Was JS NICHT macht (ohne User-Aktion): willkürliche Datei-/Hardware-Zugriffe.
Patterns: querySelector → manipulate → addEventListener.
Frameworks (React, Vue, …): Abstraktion + State + Komponenten — für Projekte ab ~500 Zeilen.
→ Du hast jetzt: verstanden wie Daten reisen (Kap 2), wie sie dargestellt werden (HTML+CSS, Kap 1+2), und wie sie interaktiv werden (JS, Kap 3). Das ganze moderne Web in drei Kapiteln.












