Signatur
Beschreibung
scrollLeft ist eine les- und schreibbare Eigenschaft jedes Elements. Beim Lesen erhältst du die aktuelle horizontale Scroll-Position des Inhalts in CSS-Pixeln. Beim Schreiben scrollt der Browser den Inhalt sofort an diese Position. Du brauchst sie zum Beispiel für horizontale Karussells, breite Tabellen, Zeitleisten oder synchron scrollende Bereiche.
Scrollen kann ein Element nur, wenn sein Inhalt breiter ist als der sichtbare Bereich (scrollWidth > clientWidth) und overflow-x auf auto, scroll oder hidden steht. Sonst ist der Wert immer 0, und Zuweisungen haben keine Wirkung. Der größte mögliche Wert ist scrollWidth - clientWidth. Werte außerhalb von 0 bis zu diesem Maximum werden automatisch begrenzt.
Für das gesamte Dokument verwendest du document.scrollingElement.scrollLeft (im Standardmodus ist das document.documentElement) oder window.scrollX. Möchtest du weich scrollen, nutze element.scrollTo({ left, behavior: 'smooth' }) oder die CSS-Eigenschaft scroll-behavior: smooth. Diese CSS-Eigenschaft wirkt auch auf direkte Zuweisungen an scrollLeft.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | number | Nur beim Schreiben: die gewünschte horizontale Scroll-Position in Pixeln. Nachkommastellen sind erlaubt. Der Wert wird auf den gültigen Bereich begrenzt. |
Rückgabewert
direction: rtl) ist der Wert 0 oder negativ.Beispiele
Scroll-Position auslesen und setzen
const box = document.querySelector('#tabelle-wrapper');
console.log(box.scrollLeft); // z. B. 0
// 200 px nach rechts scrollen
box.scrollLeft = 200;
console.log(box.scrollLeft); // 200 (oder weniger, falls das Maximum kleiner ist)
// Ganz ans rechte Ende scrollen
box.scrollLeft = box.scrollWidth - box.clientWidth;
Karussell mit Vor/Zurück-Buttons
const track = document.querySelector('.carousel');
const step = () => track.clientWidth * 0.8;
document.querySelector('.next').addEventListener('click', () => {
track.scrollBy({ left: step(), behavior: 'smooth' });
});
document.querySelector('.prev').addEventListener('click', () => {
track.scrollBy({ left: -step(), behavior: 'smooth' });
});
// Buttons am Rand deaktivieren
track.addEventListener('scroll', () => {
const max = track.scrollWidth - track.clientWidth;
document.querySelector('.prev').disabled = track.scrollLeft <= 0;
document.querySelector('.next').disabled = track.scrollLeft >= max - 1;
}, { passive: true });
Kopfzeile und Tabellenkörper synchron scrollen
const header = document.querySelector('.grid-header');
const body = document.querySelector('.grid-body');
body.addEventListener('scroll', () => {
// Kopfzeile folgt der horizontalen Position des Körpers
header.scrollLeft = body.scrollLeft;
}, { passive: true });
Scroll-Fortschritt in Prozent berechnen
const timeline = document.querySelector('.timeline');
const progress = (el) => {
const max = el.scrollWidth - el.clientWidth;
return max > 0 ? Math.round((Math.abs(el.scrollLeft) / max) * 100) : 0;
};
timeline.addEventListener('scroll', () => {
console.log(`Fortschritt: ${progress(timeline)} %`);
});
// Wichtig · Fallstricke
- Schreibrichtung von rechts nach links: Bei
direction: rtlist die Startposition laut Spezifikation0, und beim Scrollen nach links werden die Werte negativ. Chrome hält sich seit Version 85 daran, Firefox und Safari schon länger. Ältere Chromium-Versionen lieferten positive Werte. Rechne deshalb mitMath.abs(), wenn du beide Fälle abdecken musst. - Kommazahlen: Bei Zoom oder hochauflösenden Bildschirmen kann
scrollLeftNachkommastellen haben. Wenn du prüfst, ob das Ende erreicht ist, vergleiche mit etwas Spielraum (z. B.>= max - 1) statt mit exakter Gleichheit. - Performance: Wer
scrollLeftliest, zwingt den Browser zu einer sofortigen Layout-Berechnung (Reflow). Wechselst du in Schleifen zwischen Lesen und Schreiben von Layout-Werten, wird die Seite langsam. Fasse Lesezugriffe zusammen und schreibe inrequestAnimationFrame. Registriere Scroll-Listener mit{ passive: true }. - Keine Wirkung: Die Zuweisung hat keinen Effekt, wenn das Element nicht scrollbar ist (
overflow: visible, kein überstehender Inhalt) oder mitdisplay: nonenicht dargestellt wird. - Dokument scrollen: Für die ganze Seite verwendest du
document.scrollingElement. Im Quirks-Modus ist dasdocument.body, im Standardmodusdocument.documentElement. - Weiches Scrollen: Mit
scroll-behavior: smoothscrollt auch eine direkte Zuweisung weich. Ein sofortiges Zurücklesen liefert dann noch den alten oder einen Zwischenwert.