-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
86 lines (73 loc) · 2.08 KB
/
script.js
File metadata and controls
86 lines (73 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
const buttons = document.querySelectorAll('.lightbox-item');
const modals = document.querySelectorAll('.lightbox-modal');
let lastFocusedElement = null;
function showModal(id) {
lastFocusedElement = document.activeElement;
const m = document.getElementById(id);
m.classList.add('show');
document.body.style.overflow = 'hidden';
// Fokus auf ersten interaktiven Button (meist Close)
const focusable = getFocusableElements(m);
if (focusable.length) {
focusable[0].focus();
}
}
function hideModals() {
modals.forEach(m => m.classList.remove('show'));
document.body.style.overflow = '';
// Fokus zurückgeben
if (lastFocusedElement) {
lastFocusedElement.focus();
lastFocusedElement = null;
}
}
// Hilfsfunktion: Alle Fokus-Elemente im Modal finden
function getFocusableElements(container) {
return Array.from(
container.querySelectorAll(
'a[href], button, textarea, input, select, [tabindex]:not([tabindex="-1"])'
)
).filter(el => !el.disabled && el.offsetParent !== null);
}
// Event-Listener für Buttons
buttons.forEach(b => {
b.addEventListener('click', () => {
hideModals();
showModal(b.dataset.modal);
});
});
// Event-Listener für Modals
modals.forEach(m => {
const closeBtn = m.querySelector('.close');
if (closeBtn) {
closeBtn.addEventListener('click', hideModals);
}
// Klick außerhalb → schließen
m.addEventListener('click', event => {
if (event.target === m) {
hideModals();
}
});
// Fokusfalle
m.addEventListener('keydown', e => {
if (e.key === 'Tab') {
const focusable = getFocusableElements(m);
if (!focusable.length) return;
const first = focusable[0];
const last = focusable[focusable.length - 1];
if (e.shiftKey && document.activeElement === first) {
e.preventDefault();
last.focus();
} else if (!e.shiftKey && document.activeElement === last) {
e.preventDefault();
first.focus();
}
}
});
});
// ESC schließt Modal
document.addEventListener('keydown', e => {
if (e.key === 'Escape') {
hideModals();
}
});