Tutorial: Modal-Scroll mit scrollIntoView + scrollTop-Fallback

scrollIntoView scrollt den naechsten scrollbaren Container (modal-body).
Zusaetzlich wird scrollTop direkt gesetzt als Fallback via offsetTop-Berechnung.
Dieser Commit ist enthalten in:
Claude Dev
2026-03-23 22:14:35 +01:00
Ursprung fc5846e878
Commit 383fe1ca8c

Datei anzeigen

@@ -1849,15 +1849,18 @@ const Tutorial = {
var el = document.querySelector(selector);
var modalBody = document.querySelector('#modal-new .modal-body');
if (!el || !modalBody) return Promise.resolve();
// Element zentriert im sichtbaren Modal-Bereich anzeigen
var elRect = el.getBoundingClientRect();
var bodyRect = modalBody.getBoundingClientRect();
var bodyVisibleH = bodyRect.height;
var offset = elRect.top - bodyRect.top + modalBody.scrollTop;
var elCenter = offset + elRect.height / 2;
var targetScroll = elCenter - bodyVisibleH / 2;
modalBody.scrollTo({ top: Math.max(0, targetScroll), behavior: 'smooth' });
return new Promise(function(resolve) { setTimeout(resolve, 500); });
// scrollIntoView auf dem Element - scrollt den naechsten scrollbaren Container
try { el.scrollIntoView({ behavior: 'smooth', block: 'center' }); } catch(e) {}
// Fallback: manuell scrollTop setzen via offsetTop-Berechnung
var elTop = 0;
var node = el;
while (node && node !== modalBody) {
elTop += node.offsetTop || 0;
node = node.offsetParent;
}
var targetScroll = elTop - modalBody.clientHeight / 2 + el.offsetHeight / 2;
modalBody.scrollTop = Math.max(0, targetScroll);
return new Promise(function(resolve) { setTimeout(resolve, 400); });
},
// Helfer: Modal scrollen UND Bubble neu positionieren