Signatur
Beschreibung
Die schreibgeschützte Eigenschaft Window.scrollMaxY liefert die größtmögliche vertikale Scroll-Position des Dokuments in CSS-Pixeln. Anders gesagt: Sie gibt an, wie weit man nach unten scrollen kann, bis das Ende des Dokuments erreicht ist. Der Wert entspricht ungefähr document.documentElement.scrollHeight - document.documentElement.clientHeight.
Typische Anwendungsfälle sind Lesefortschrittsanzeigen, „Nach oben“-Schaltflächen oder das Erkennen, ob der Nutzer das Seitenende erreicht hat (etwa für unendliches Nachladen). In Verbindung mit window.scrollY lässt sich so der prozentuale Scroll-Fortschritt berechnen.
Wichtig: Die Eigenschaft ist nicht standardisiert und wird nur von Firefox unterstützt. In Chrome, Safari und Edge ist sie undefined. Für produktiven Code sollte man daher immer die standardkonforme Berechnung über scrollHeight und clientHeight verwenden oder zumindest einen Fallback vorsehen.
Rückgabewert
0, wenn das Dokument nicht vertikal scrollbar ist. In Nicht-Firefox-Browsern ist die Eigenschaft undefined.Beispiele
Maximale Scroll-Position auslesen (mit Fallback)
// Browserübergreifende Hilfsfunktion
const getScrollMaxY = () =>
typeof window.scrollMaxY === 'number'
? window.scrollMaxY
: document.documentElement.scrollHeight - document.documentElement.clientHeight;
console.log(`Maximal scrollbar: ${getScrollMaxY()} px`);
Lesefortschritt in Prozent anzeigen
const progressBar = document.querySelector('#progress');
const getScrollMaxY = () =>
window.scrollMaxY ??
document.documentElement.scrollHeight - document.documentElement.clientHeight;
const updateProgress = () => {
const max = getScrollMaxY();
const percent = max > 0 ? (window.scrollY / max) * 100 : 100;
progressBar.style.width = `${percent.toFixed(1)}%`;
};
window.addEventListener('scroll', updateProgress, { passive: true });
updateProgress();
Seitenende erkennen und Inhalte nachladen
const getScrollMaxY = () =>
window.scrollMaxY ??
document.documentElement.scrollHeight - document.documentElement.clientHeight;
const loadMore = async () => {
const response = await fetch('/api/artikel?offset=20');
const items = await response.json();
console.log(`${items.length} weitere Artikel geladen`);
};
window.addEventListener('scroll', () => {
// 100 px Puffer vor dem Ende
if (window.scrollY >= getScrollMaxY() - 100) {
loadMore();
}
}, { passive: true });
Direkt ans Seitenende springen
const maxY = window.scrollMaxY ??
document.documentElement.scrollHeight - document.documentElement.clientHeight;
window.scrollTo({ top: maxY, behavior: 'smooth' });
// Wichtig · Fallstricke
- Nicht standardisiert: Nur Firefox (Gecko) unterstützt
scrollMaxY. Chrome, Edge und Safari liefernundefined– ohne Fallback entstehen dort Berechnungen mitNaN. - Standardkonforme Alternative:
document.documentElement.scrollHeight - document.documentElement.clientHeightfunktioniert in allen Browsern. - Nicht ideal für Zoom/Subpixel: Der Wert ist ganzzahlig;
window.scrollYkann bei Zoom oder hochauflösenden Displays Nachkommastellen haben. Vergleiche wiescrollY === scrollMaxYdaher besser mit Toleranz (z. B.>= max - 1) durchführen. - Dynamische Inhalte: Der Wert ändert sich, sobald Inhalte nachgeladen, Bilder geladen oder das Fenster in der Größe verändert wird – nicht zwischenspeichern, sondern bei Bedarf neu auslesen.
- Performance: Das Auslesen kann ein Layout (Reflow) erzwingen. In
scroll-Handlern passive Listener und ggf.requestAnimationFramenutzen. - Die Eigenschaft ist schreibgeschützt; Zuweisungen werden ignoriert.