/** * Glossar-Experimente — Klimazonen. * * Registrierung: window.GlossarExperiments['klimazone'] = function (root) { … } * Der Renderer (glossar.php) hängt einen leeren Container ein und ruft die * Funktion mit diesem Container als einzigem Argument auf. * * Nur bestehende .ge-*-Klassen aus glossar.php verwenden, kein neues CSS. */ (function () { 'use strict'; const NS = 'http://www.w3.org/2000/svg'; const svgEl = (tag, attrs, parent) => { const el = document.createElementNS(NS, tag); if (attrs) for (const k in attrs) el.setAttribute(k, attrs[k]); if (parent) parent.appendChild(el); return el; }; // ===================================================================== // Experiment: Klimazonen der Erde — Querschnitt Äquator → Pol // Bänder anklicken → Temperatur, Regen und was dort wächst. // ===================================================================== function climateZones(root) { // Bänder von OBEN (Pol, kalt) nach UNTEN (Äquator, heiß). // y-Werte passen zu viewBox 0 0 600 340. const zones = [ { key: 'polar', name: 'Polargebiete', where: 'Arktis · Antarktis', temp: '−30 – 0 °C', rain: 'sehr wenig, meist Schnee', grows: 'kein Ackerbau — zu kalt', emoji: '🧊', color: '#dbe9ee', text: '#2a4a55', border: '#9fbcc6', state: 'now' }, { key: 'boreal', name: 'Kalte Zone (Nadelwald)', where: 'Skandinavien · Kanada', temp: '0 – 5 °C im Jahr', rain: 'mittel, lange kalte Winter', grows: 'Nadelwald, Beeren — kaum Ackerbau', emoji: '🌲', color: '#5a8a8f', text: '#ffffff', border: '#3d6b70', state: 'now' }, { key: 'temperate', name: 'Gemäßigte Zone', where: 'Österreich · Mitteleuropa', temp: '8 – 12 °C im Jahr', rain: '600 – 1.000 mm, 4 Jahreszeiten', grows: 'Äpfel, Getreide, Erdäpfel', emoji: '🍎', color: '#4a7c4e', text: '#ffffff', border: '#356139', state: 'good', home: true }, { key: 'subtropic', name: 'Subtropen', where: 'Mittelmeer · Kalifornien', temp: '15 – 22 °C im Jahr', rain: 'trockene heiße Sommer', grows: 'Oliven, Zitrusfrüchte, Mandeln', emoji: '🍊', color: '#e8c547', text: '#4a3d0a', border: '#c9a516', state: 'warn' }, { key: 'tropic', name: 'Tropen (Äquator)', where: 'heiß und feucht', temp: '24 – 28 °C, immer warm', rain: '1.500 – 3.000 mm, sehr viel Regen', grows: 'Kakao, Banane, Kaffee, Reis', emoji: '🍌', color: '#2e7d4f', text: '#ffffff', border: '#1f5a38', state: 'warn' } ]; root.innerHTML = `

🌍 Die Klimazonen der Erde

Von unten (Äquator, viel Sonne) nach oben (Pol, wenig Sonne) wird es kühler. Tippe auf ein Band und schau, was dort wächst.

Tippe auf ein Band …
Wo etwas wächst, hängt von Wärme und Regen ab.

Einteilung nach den Klimazonen der Köppen-Geiger-Klassifikation; Temperatur- und Niederschlagsbereiche sind grobe kindgerechte Richtwerte. Quelle: Klimadiagramme & Köppen-Geiger-Klassifikation.

`; const svg = root.querySelector('.ge-gh-svg'); const info = root.querySelector('#ge-kz-info'); const keyPill = root.querySelector('#ge-kz-key'); if (!svg || !info || !keyPill) return; const BAND_X = 92; const BAND_W = 466; const BAND_H = 54; const TOP = 26; // Linke Achse: Pol oben → Äquator unten, mit Sonnen-Symbol. const axisTop = TOP; const axisBot = TOP + zones.length * BAND_H; svgEl('line', { x1: 60, y1: axisTop, x2: 60, y2: axisBot, stroke: '#4a4a4a', 'stroke-width': '1.5' }, svg); // Pfeilspitzen (oben = kalt, unten = warm) svgEl('polygon', { points: `60,${axisTop - 8} 55,${axisTop + 2} 65,${axisTop + 2}`, fill: '#4a4a4a' }, svg); svgEl('polygon', { points: `60,${axisBot + 8} 55,${axisBot - 2} 65,${axisBot - 2}`, fill: '#4a4a4a' }, svg); const polTxt = svgEl('text', { x: 44, y: axisTop + 6, 'text-anchor': 'middle', 'font-size': '11', 'font-weight': '800', fill: '#2a4a55', transform: `rotate(-90, 44, ${axisTop + 40})` }, svg); polTxt.textContent = 'Pol ❄'; const aeqTxt = svgEl('text', { x: 44, y: axisBot - 4, 'text-anchor': 'middle', 'font-size': '11', 'font-weight': '800', fill: '#2e7d4f', transform: `rotate(-90, 44, ${axisBot - 40})` }, svg); aeqTxt.textContent = 'Äquator ☀'; const nodes = []; let current = null; zones.forEach((z, i) => { const y = TOP + i * BAND_H; const g = svgEl('g', { class: 'ge-kz-band', style: 'cursor:pointer', tabindex: '0', role: 'button', 'aria-label': z.name }, svg); const rect = svgEl('rect', { x: BAND_X, y: y + 2, width: BAND_W, height: BAND_H - 4, rx: 8, fill: z.color, stroke: z.border, 'stroke-width': '1.5' }, g); // Emoji links im Band svgEl('text', { x: BAND_X + 26, y: y + BAND_H / 2 + 9, 'text-anchor': 'middle', 'font-size': '26' }, g) .textContent = z.emoji; // Zonenname const name = svgEl('text', { x: BAND_X + 52, y: y + BAND_H / 2 - 2, 'font-size': '14', 'font-weight': '800', fill: z.text }, g); name.textContent = z.name; // Wo (klein darunter) const sub = svgEl('text', { x: BAND_X + 52, y: y + BAND_H / 2 + 15, 'font-size': '10.5', 'font-weight': '600', fill: z.text, opacity: '0.9' }, g); sub.textContent = z.where; // „Hier ist Österreich"-Marker if (z.home) { const marker = svgEl('g', {}, g); svgEl('rect', { x: BAND_X + BAND_W - 118, y: y + BAND_H / 2 - 13, width: 112, height: 24, rx: 12, fill: '#ffffff', stroke: '#c85c4a', 'stroke-width': '1.5' }, marker); svgEl('text', { x: BAND_X + BAND_W - 62, y: y + BAND_H / 2 + 3, 'text-anchor': 'middle', 'font-size': '11', 'font-weight': '800', fill: '#c85c4a' }, marker) .textContent = '📍 Österreich'; } nodes.push({ z, rect }); const activate = () => select(i); g.addEventListener('click', activate); g.addEventListener('keydown', (ev) => { if (ev.key === 'Enter' || ev.key === ' ') { ev.preventDefault(); activate(); } }); }); function select(i) { const z = zones[i]; current = i; // Auswahl-Rahmen setzen nodes.forEach((n, j) => { n.rect.setAttribute('stroke', j === i ? '#1f4e5a' : n.z.border); n.rect.setAttribute('stroke-width', j === i ? '3.5' : '1.5'); }); info.dataset.state = z.state; info.innerHTML = `${z.name} · ${z.where}` + `
🌡 ${z.temp}` + `
💧 Regen: ${z.rain}` + `
🌱 Wächst: ${z.grows}`; // Kernerkenntnis dynamisch auf die gewählte Zone beziehen let msg; if (z.key === 'tropic') { msg = 'In den Tropen ist es heiß und feucht — nur hier wächst Kakao für Schokolade.'; } else if (z.key === 'temperate') { msg = 'Bei uns in Österreich ist es mild mit Regen — perfekt für Äpfel und Getreide, aber zu kühl für Kakao.'; } else if (z.key === 'polar' || z.key === 'boreal') { msg = 'Zu kalt und zu wenig Sonne: hier gibt es kaum oder gar keinen Ackerbau.'; } else { msg = 'Heiße, trockene Sommer mögen Oliven und Zitrusfrüchte — bei uns wäre es dafür zu kühl.'; } keyPill.dataset.state = 'now'; keyPill.innerHTML = `Merke: ${msg}`; } // Startzustand: gemäßigte Zone (Österreich) vorgewählt select(2); } // Registry — Object.assign, damit die Ladereihenfolge egal ist. window.GlossarExperiments = Object.assign(window.GlossarExperiments || {}, { 'klimazone': climateZones }); })();