Fix: Toolbar-Buttons kollidierten mit Karten-Zoom-Regler
Alle sieben Aktions-Buttons (Standort, Ausflugsziel anlegen, KI-Prompt-Generator, Import, Backup) lagen bislang als absolut positionierte Toolbar oben links ueber der Karte - direkt dort, wo Leaflet standardmaessig seinen Zoom-Regler platziert, wodurch sich beides ueberschnitt. Auf dem Smartphone nahm die Toolbar zudem viel Platz auf der Karte weg. Die Buttons sind jetzt in einem aufklappbaren Hamburger-Menue im Header (js/main.js: setupMenuToggle(), schliesst bei Aktion/Escape/Klick ausserhalb) statt direkt auf der Karte. Der Zoom-Regler wurde zusaetzlich auf oben rechts verschoben (js/map/mapController.js), damit oben links dauerhaft Platz fuer eigene Overlays (z.B. map-picking-hint) bleibt. App-Shell auf Flexbox umgestellt (body als Flex-Spalte, .app-layout mit flex:1) statt des bisherigen calc(100vh - fixe Header-Hoehe) auf Desktop, da der Header jetzt bei geoeffnetem Menue waechst - die alte fixe Berechnung haette Karte/Liste dabei abgeschnitten. --header-height war dadurch ueberfluessig und wurde entfernt.
This commit is contained in:
+52
@@ -47,6 +47,57 @@
|
||||
closeBtn.addEventListener('click', hideStatus);
|
||||
}
|
||||
|
||||
// Aktionen-Menü im Header (Hamburger): fasst die frueher direkt auf der
|
||||
// Karte liegenden Buttons zusammen, damit sie nicht mehr mit dem
|
||||
// Leaflet-Zoom-Regler kollidieren und auf dem Smartphone nicht die
|
||||
// Karte zupflastern.
|
||||
function setupMenuToggle() {
|
||||
const toggleBtn = document.getElementById('menu-toggle-btn');
|
||||
const menu = document.getElementById('app-menu');
|
||||
if (!toggleBtn || !menu) return;
|
||||
|
||||
function closeMenu() {
|
||||
menu.hidden = true;
|
||||
toggleBtn.setAttribute('aria-expanded', 'false');
|
||||
}
|
||||
|
||||
function openMenu() {
|
||||
menu.hidden = false;
|
||||
toggleBtn.setAttribute('aria-expanded', 'true');
|
||||
}
|
||||
|
||||
toggleBtn.addEventListener('click', () => {
|
||||
if (menu.hidden) {
|
||||
openMenu();
|
||||
} else {
|
||||
closeMenu();
|
||||
}
|
||||
});
|
||||
|
||||
// Menü nach Klick auf eine der enthaltenen Aktionen automatisch
|
||||
// schließen (die jeweilige Aktion selbst wurde durch den eigenen
|
||||
// Klick-Handler des Buttons bereits vorher ausgelöst, da Events erst
|
||||
// beim Ziel-Element und danach erst am umschließenden <nav> ankommen).
|
||||
menu.addEventListener('click', (event) => {
|
||||
if (event.target.closest('button')) {
|
||||
closeMenu();
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('keydown', (event) => {
|
||||
if (event.key === 'Escape' && !menu.hidden) {
|
||||
closeMenu();
|
||||
toggleBtn.focus();
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('click', (event) => {
|
||||
if (menu.hidden) return;
|
||||
if (menu.contains(event.target) || toggleBtn.contains(event.target)) return;
|
||||
closeMenu();
|
||||
});
|
||||
}
|
||||
|
||||
function setupGeolocationButton() {
|
||||
const button = document.getElementById('locate-btn');
|
||||
if (!button) return;
|
||||
@@ -183,6 +234,7 @@
|
||||
}
|
||||
|
||||
setupStatusClose();
|
||||
setupMenuToggle();
|
||||
|
||||
bootstrap().catch((err) => {
|
||||
console.error('EventMap: Initialisierung fehlgeschlagen.', err);
|
||||
|
||||
Reference in New Issue
Block a user