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:
@@ -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
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren