Signatur
Beschreibung
Die Eigenschaft source einer ScrollTimeline gibt das Element zurück, dessen Scroll-Position die Zeitleiste antreibt. Scrollt dieser Scroller vom Anfang bis zum Ende seines Scrollbereichs, läuft der Fortschritt der Zeitleiste von 0 % bis 100 %. Angehängte Animationen laufen dabei im gleichen Maß mit.
Welcher Scroller verwendet wird, legen Sie im Konstruktor new ScrollTimeline({ source, axis }) fest. Lassen Sie source weg, gilt document.scrollingElement als Standard, meist also das <html>-Element. Später können Sie den Wert nur noch lesen. Für einen anderen Scroller brauchen Sie eine neue Zeitleiste.
In der Praxis ist die Eigenschaft beim Debuggen nützlich. Sie hilft auch, wenn eine Zeitleiste über animation.timeline weitergegeben wird und Sie wissen müssen, an welchen Container sie gebunden ist, etwa um Listener zu registrieren oder Messungen durchzuführen.
Rückgabewert
source dann null.Beispiele
Standard-Scroller auslesen
// Ohne source-Option wird das Dokument-Scrollelement verwendet
const timeline = new ScrollTimeline();
console.log(timeline.source === document.scrollingElement);
console.log(timeline.source.nodeName);
Fortschrittsbalken an einen Container binden
const container = document.querySelector('#artikel');
const balken = document.querySelector('#fortschritt');
const timeline = new ScrollTimeline({ source: container, axis: 'block' });
balken.animate(
{ transform: ['scaleX(0)', 'scaleX(1)'] },
{ timeline, fill: 'both' }
);
console.log(timeline.source.id);
Scroller einer bestehenden Animation ermitteln
const beschreibeTimeline = (animation) => {
const tl = animation.timeline;
if (typeof ScrollTimeline !== 'undefined' && tl instanceof ScrollTimeline) {
const { source, axis } = tl;
return `Scroll-gesteuert durch <${source?.nodeName.toLowerCase()}> (Achse: ${axis})`;
}
return 'Zeitgesteuert (DocumentTimeline)';
};
document.getAnimations().forEach((a) => console.log(beschreibeTimeline(a)));
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
timeline.source = elhat keine Wirkung und wirft im Strict Mode einenTypeError. Für einen anderen Scroller erzeugen Sie eine neueScrollTimeline. - Kein Scrollbereich: Ist das Element nicht scrollbar (kein
overflowoder kein überlaufender Inhalt), bleibt die Zeitleiste inaktiv (currentTimeistnull), obwohlsourcegesetzt ist. - Browser-Kompatibilität: Scroll-gesteuerte Animationen sind noch nicht in allen Browsern verfügbar. Chrome/Edge unterstützen sie ab Version 115. Firefox bietet sie nur hinter einem Flag an. Prüfen Sie die Unterstützung vorab mit
'ScrollTimeline' in windowoderCSS.supports('animation-timeline: scroll()'). - Wird eine Zeitleiste in CSS über
scroll()bzw.scroll-timelinedefiniert, zeigtsourceauf den tatsächlich aufgelösten Scroller (z. B. den nächsten scrollbaren Vorfahren).