/** * Ročníková práce: Interaktivní průvodce vesmírem * Předmět: Webové technologie (2. ročník) * Modul: Kompletní interaktivita (Vanilla JS ES6+) */ document.addEventListener('DOMContentLoaded', () => { // ========================================== // 1. SEKCE: VESMÍRNÁ KALKULAČKA // ========================================== const weightInput = document.getElementById('weight-input'); const calcButton = document.getElementById('calc-btn'); const calcResult = document.getElementById('calc-result'); const spaceGravity = { merkur: { name: 'Merkur', factor: 0.38, icon: '🪐' }, venuse: { name: 'Venuše', factor: 0.91, icon: '🌍' }, mars: { name: 'Mars', factor: 0.38, icon: '🔴' }, jupiter: { name: 'Jupiter', factor: 2.34, icon: '🟤' }, saturn: { name: 'Saturn', factor: 1.06, icon: '🪐' }, uran: { name: 'Uran', factor: 0.92, icon: '🔵' }, neptun: { name: 'Neptun', factor: 1.19, icon: '🔵' }, mesic: { name: 'Měsíc', factor: 0.166, icon: '⚪' } }; const calculateSpaceWeight = () => { const earthWeight = parseFloat(weightInput.value); if (isNaN(earthWeight) || earthWeight <= 0) { calcResult.innerHTML = `

⚠️ Prosím, zadej platnou kladnou váhu v kilogramech.

`; return; } let resultHTML = `

Tvoje váha ve vesmíru:

`; Object.keys(spaceGravity).forEach(key => { const planet = spaceGravity[key]; const planetWeight = (earthWeight * planet.factor).toFixed(1); resultHTML += `
${planet.icon} ${planet.name} ${planetWeight} kg
`; }); resultHTML += `
`; calcResult.innerHTML = resultHTML; }; if (calcButton) { calcButton.addEventListener('click', calculateSpaceWeight); } if (weightInput) { weightInput.addEventListener('keypress', (e) => { if (e.key === 'Enter') calculateSpaceWeight(); }); } // ========================================== // 2. SEKCE: DETAIL PLANETY – modální dialog // ========================================== const planetDetails = { mars: { title: 'Mars', subtitle: 'Rudá planeta', color: '#c1440e', colorLight: 'rgba(193, 68, 14, 0.15)', stats: [ { label: 'Vzdálenost od Slunce', value: '227,9 mil. km' }, { label: 'Průměr', value: '6 779 km' }, { label: 'Délka dne', value: '24 h 37 min' }, { label: 'Délka roku', value: '687 pozemských dní' }, { label: 'Gravitace', value: '3,72 m/s² (38 % Země)' }, { label: 'Měsíce', value: 'Phobos a Deimos' }, ], facts: [ { icon: '🏔️', text: 'Olympus Mons – nejvyšší hora sluneční soustavy (22 km)' }, { icon: '🌋', text: 'Valles Marineris – kaňon dlouhý přes 4 000 km' }, { icon: '🤖', text: 'Rover Perseverance aktivně zkoumá povrch od roku 2021' }, { icon: '💧', text: 'Stopy dávného kapalného vody v geologických vrstvách' }, { icon: '🌡️', text: 'Teploty od −125 °C v zimě až po +20 °C v létě' }, { icon: '🌬️', text: 'Atmosféra tvoří z 95 % oxid uhličitý' }, ], description: 'Mars je čtvrtá planeta sluneční soustavy a druhá nejmenší po Merkuru. Svůj charakteristický načervenalý vzhled získal díky oxidu železitému (rzi) na svém povrchu. V současnosti je cílem intenzivního vědeckého výzkumu zaměřeného na možnost minulého nebo současného života.' } }; // Vytvoříme modální dialog a přidáme ho do dokumentu const modal = document.createElement('dialog'); modal.id = 'planet-modal'; modal.setAttribute('aria-modal', 'true'); modal.setAttribute('aria-labelledby', 'modal-title'); modal.innerHTML = ``; document.body.appendChild(modal); // Zavření kliknutím na pozadí modal.addEventListener('click', (e) => { if (e.target === modal) closeModal(); }); // Zavření klávesou Escape modal.addEventListener('cancel', (e) => { e.preventDefault(); closeModal(); }); function closeModal() { modal.classList.remove('modal-open'); setTimeout(() => modal.close(), 280); } function openModal(planetKey) { const data = planetDetails[planetKey]; if (!data) return; const statsHTML = data.stats.map(s => ` `).join(''); const factsHTML = data.facts.map(f => ` `).join(''); document.getElementById('modal-content').innerHTML = ` `; modal.showModal(); // Malé zpoždění pro CSS animaci requestAnimationFrame(() => { requestAnimationFrame(() => modal.classList.add('modal-open')); }); } // Event listenery na všechna tlačítka Detail planety const detailButtons = document.querySelectorAll('button[data-planet]'); detailButtons.forEach(button => { button.addEventListener('click', () => { const planetKey = button.getAttribute('data-planet'); openModal(planetKey); }); }); });