Signatur
Beschreibung
getTotalLength() liefert die Länge der Kontur eines SVG-Geometrie-Elements, also von <path>, <line>, <polyline>, <polygon>, <rect>, <circle> und <ellipse>. Der Wert wird in Benutzereinheiten angegeben, also im lokalen Koordinatensystem des Elements. Transformationen oder die Skalierung durch viewBox fließen nicht mit ein.
Am häufigsten nutzt man die Methode für „Line-Drawing“-Animationen. Man setzt stroke-dasharray und stroke-dashoffset auf die Gesamtlänge und animiert den Offset dann auf 0. So sieht es aus, als würde die Linie gezeichnet. Zusammen mit getPointAtLength() kann man außerdem Objekte an einem Pfad entlang bewegen oder einen Pfad in gleich lange Abschnitte teilen.
Das Attribut pathLength ändert den Rückgabewert von getTotalLength() nicht. Die Methode gibt immer die tatsächlich berechnete Länge zurück. pathLength skaliert nur die Berechnungen für Strichmuster und Textpfade. Weil die Länge numerisch angenähert wird, können sich die Werte zwischen Browsern leicht unterscheiden.
Rückgabewert
d-Attribut) ist der Wert 0.Beispiele
Länge eines Pfads auslesen
const path = document.querySelector('#kurve');
// <path id="kurve" d="M 0 0 L 100 0 L 100 100" />
const laenge = path.getTotalLength();
console.log(`Pfadlänge: ${laenge}`);
Linie „zeichnen“ mit stroke-dashoffset
const path = document.querySelector('#logo-pfad');
const laenge = path.getTotalLength();
// Strich unsichtbar machen: Lücke so lang wie der ganze Pfad
path.style.strokeDasharray = `${laenge}`;
path.style.strokeDashoffset = `${laenge}`;
// Offset mit der Web Animations API auf 0 animieren
path.animate(
[{ strokeDashoffset: laenge }, { strokeDashoffset: 0 }],
{ duration: 2000, easing: 'ease-in-out', fill: 'forwards' }
);
Punkte in gleichen Abständen entlang eines Pfads
const path = document.querySelector('#route');
const laenge = path.getTotalLength();
const anzahl = 5;
const punkte = Array.from({ length: anzahl + 1 }, (_, i) => {
const { x, y } = path.getPointAtLength((laenge / anzahl) * i);
return { x: Math.round(x), y: Math.round(y) };
});
console.log(punkte);
Umfang eines Kreises
const kreis = document.querySelector('circle'); // r="50"
console.log(kreis.getTotalLength().toFixed(2));
// Wichtig · Fallstricke
- Kompatibilität: Früher gab es die Methode nur auf
SVGPathElement. Bei sehr alten Browsern (z. B. Safari < 12, Firefox < 57) fehlt sie für Formen wie<circle>oder<rect>, oder sie funktioniert dort nicht zuverlässig. - Transformationen werden ignoriert:
transform, CSS-Skalierung undviewBoxverändern die sichtbare Länge, aber nicht den Rückgabewert. Wenn du die Länge auf dem Bildschirm brauchst, rechne sie selbst mitgetScreenCTM()um. pathLengthwirkt sich nicht auf den Rückgabewert aus. Setzt du z. B.pathLength=\"1\", kannst du fürstroke-dasharrayeinfach1verwenden und brauchstgetTotalLength()dann oft gar nicht.- Das Element muss im DOM sein und eine gültige Geometrie haben. Einige ältere Browser werfen bei Elementen, die nicht dargestellt werden (
display: none), einen Fehler oder geben0zurück. - Performance: Bei komplexen Pfaden ist die Berechnung aufwendig. Speichere das Ergebnis zwischen, statt die Methode in jedem Animations-Frame neu aufzurufen.
- Die Werte werden angenähert und können sich zwischen Browsern in den Nachkommastellen unterscheiden.