diff --git a/adventskalender/shared/js/position.js b/adventskalender/shared/js/position.js index c6969fd..92c358b 100644 --- a/adventskalender/shared/js/position.js +++ b/adventskalender/shared/js/position.js @@ -1,11 +1,11 @@ /** - * Bratonien Adventskalender – Positionierung aller Türchen und Flügel (2025) + * Bratonien Adventskalender – Türchen-Positionierung (2025) * --------------------------------------------------------- - * Liest data-top / data-left / data-width aus allen relevanten Elementen - * und positioniert sie exakt auf dem sichtbaren Hintergrundbild. + * Liest data-top / data-left / data-width aus jedem Element + * und positioniert .door, .fluegel, .openfield korrekt über dem Bild. */ -function positionAllElements() { +function positionAllDoors() { const cont = document.querySelector('.kalenderbild'); const img = cont?.querySelector('img'); if (!cont || !img) return; @@ -13,67 +13,46 @@ function positionAllElements() { const imgRect = img.getBoundingClientRect(); const contRect = cont.getBoundingClientRect(); - // === Einzeltüren & Openfields === - document.querySelectorAll('.door').forEach(door => { - const day = door.dataset.day; - const topPct = parseFloat(door.dataset.top) || 0; - const leftPct = parseFloat(door.dataset.left) || 0; - const widthPct = parseFloat(door.dataset.width) || 10; + // Normale Türen + Openfields + document.querySelectorAll('.door, .openfield').forEach(el => { + const topPct = parseFloat(el.dataset.top) || 0; + const leftPct = parseFloat(el.dataset.left) || 0; + const widthPct = parseFloat(el.dataset.width) || 10; - const w = imgRect.width * (widthPct / 100); - const t = imgRect.top - contRect.top + imgRect.height * (topPct / 100); - const l = imgRect.width * (leftPct / 100) + (contRect.width - imgRect.width) / 2; + const widthPx = imgRect.width * (widthPct / 100); + const heightPx = widthPx; // quadratisch - door.style.position = 'absolute'; - door.style.width = w + 'px'; - door.style.height = w + 'px'; - door.style.top = t + 'px'; - door.style.left = l + 'px'; - - const field = document.querySelector(`.openfield[data-day="${day}"]`); - if (field) { - field.style.position = 'absolute'; - field.style.width = w + 'px'; - field.style.height = w + 'px'; - field.style.top = t + 'px'; - field.style.left = l + 'px'; - } + el.style.position = 'absolute'; + el.style.width = widthPx + 'px'; + el.style.height = heightPx + 'px'; + el.style.top = (imgRect.top - contRect.top + imgRect.height * (topPct / 100)) + 'px'; + el.style.left = (imgRect.width * (leftPct / 100) + (contRect.width - imgRect.width) / 2) + 'px'; }); - // === Flügel (linke und rechte Seite) === - document.querySelectorAll('.fluegel').forEach(flugel => { - const topPct = parseFloat(flugel.dataset.top) || 0; - const leftPct = parseFloat(flugel.dataset.left) || 0; - const widthPct = parseFloat(flugel.dataset.width) || 5; + // Flügel: jeweils halbe Breite, doppelte Höhe (nicht quadratisch!) + document.querySelectorAll('.fluegel').forEach(fluegel => { + const topPct = parseFloat(fluegel.dataset.top) || 0; + const leftPct = parseFloat(fluegel.dataset.left) || 0; + const widthPct = parseFloat(fluegel.dataset.width) || 10; - const fullW = imgRect.width * (widthPct / 100); - const w = fullW / 2; - const h = fullW; // volle Türhöhe = Breite der gesamten Tür - const t = imgRect.top - contRect.top + imgRect.height * (topPct / 100); - const l = imgRect.width * (leftPct / 100) + (contRect.width - imgRect.width) / 2; + const widthPx = imgRect.width * (widthPct / 100) / 2; + const heightPx = widthPx * 2; - flugel.style.position = 'absolute'; - flugel.style.width = w + 'px'; - flugel.style.height = h + 'px'; - flugel.style.top = t + 'px'; - - if (flugel.classList.contains('left')) { - flugel.style.left = l + 'px'; - } else if (flugel.classList.contains('right')) { - flugel.style.left = (l + w) + 'px'; - } + fluegel.style.position = 'absolute'; + fluegel.style.width = widthPx + 'px'; + fluegel.style.height = heightPx + 'px'; + fluegel.style.top = (imgRect.top - contRect.top + imgRect.height * (topPct / 100)) + 'px'; + fluegel.style.left = (imgRect.width * (leftPct / 100) + (contRect.width - imgRect.width) / 2) + 'px'; }); } -window.addEventListener('load', positionAllElements); -window.addEventListener('resize', positionAllElements); - +window.addEventListener('load', positionAllDoors); +window.addEventListener('resize', positionAllDoors); window.addEventListener('orientationchange', () => { - setTimeout(positionAllElements, 300); + setTimeout(positionAllDoors, 300); }); - document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'visible') { - setTimeout(positionAllElements, 200); + setTimeout(positionAllDoors, 200); } }); \ No newline at end of file