Signatur
Beschreibung
Die schreibgeschützte Eigenschaft document.scrollingElement gibt eine Referenz auf das Element zurück, das für das Scrollen des gesamten Dokuments (des Viewports) zuständig ist. Im Standardmodus (<!DOCTYPE html>) ist das document.documentElement, also <html>. Im Quirks-Modus ist es document.body, sofern dieses Element selbst nicht scrollbar ist.
Früher mussten Entwickler raten, ob document.documentElement.scrollTop oder document.body.scrollTop den richtigen Wert liefert – das hing von Browser und Rendermodus ab. scrollingElement beseitigt dieses Problem: Man liest oder setzt scrollTop, scrollLeft, scrollHeight usw. direkt am zurückgegebenen Element und muss sich nicht um die Unterschiede kümmern.
Typische Einsatzfälle sind Scroll-Fortschrittsanzeigen, „Nach oben“-Schaltflächen, das Speichern und Wiederherstellen der Scrollposition sowie Bibliotheken, die sowohl in Standard- als auch in Quirks-Dokumenten zuverlässig funktionieren müssen.
Rückgabewert
document.documentElement, im Quirks-Modus ggf. document.body. null, wenn kein solches Element existiert (z. B. im Quirks-Modus ohne <body> oder wenn <body> selbst scrollbar ist).Beispiele
Scrolling-Element ermitteln
const scroller = document.scrollingElement;
console.log(scroller.tagName);
console.log(document.compatMode);
Scroll-Fortschrittsbalken
const bar = document.querySelector('#progress');
const updateProgress = () => {
const el = document.scrollingElement ?? document.documentElement;
const max = el.scrollHeight - el.clientHeight;
const percent = max > 0 ? (el.scrollTop / max) * 100 : 0;
bar.style.width = `${percent.toFixed(1)}%`;
};
window.addEventListener('scroll', updateProgress, { passive: true });
updateProgress();
„Nach oben“-Button und Position merken
const scroller = document.scrollingElement;
// Position beim Verlassen speichern
window.addEventListener('pagehide', () => {
sessionStorage.setItem('scrollY', String(scroller.scrollTop));
});
// Position beim Laden wiederherstellen
const saved = Number(sessionStorage.getItem('scrollY') ?? 0);
scroller.scrollTop = saved;
// Sanft nach oben scrollen
document.querySelector('#to-top').addEventListener('click', () => {
scroller.scrollTo({ top: 0, behavior: 'smooth' });
});
// Wichtig · Fallstricke
- Die Eigenschaft ist schreibgeschützt – das Element selbst lässt sich nicht austauschen, seine Scroll-Eigenschaften (
scrollTop,scrollLeft) aber schon. - Der Rückgabewert kann
nullsein; defensiver Code nutztdocument.scrollingElement ?? document.documentElement. - Für reine Lesezugriffe auf die Viewport-Position sind
window.scrollY/window.scrollXoft einfacher;scrollingElementist nützlich, wenn man ein echtes Element braucht (z. B. fürscrollHeightoder generische Scroll-Funktionen, die ein Element erwarten). - Der
scroll-Event des Dokuments wird anwindow/documentausgelöst, nicht amscrollingElementselbst. - Kompatibilität: in allen modernen Browsern verfügbar; der Internet Explorer unterstützt die Eigenschaft nicht (dort ggf. Polyfill oder Fallback auf
document.documentElement/document.body).