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