Signatur
Beschreibung
Die Eigenschaft spacing des Interfaces SVGTextPathElement spiegelt das SVG-Attribut spacing eines <textPath>-Elements wider. Sie legt fest, wie der Abstand zwischen den typografischen Zeichen berechnet wird, die entlang des Pfades gezeichnet werden.
Zurückgegeben wird ein SVGAnimatedEnumeration-Objekt. Dessen baseVal enthält den im Markup gesetzten Wert, animVal den aktuellen (ggf. animierten) Wert. Beide sind Zahlen, die den Konstanten des Interfaces entsprechen:
SVGTextPathElement.TEXTPATH_SPACINGTYPE_UNKNOWN(0) – unbekannter oder ungültiger WertSVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO(1) – entsprichtspacing="auto": der Browser darf Abstände für eine optisch bessere Darstellung anpassenSVGTextPathElement.TEXTPATH_SPACINGTYPE_EXACT(2) – entsprichtspacing="exact"(Standardwert): Zeichen werden exakt nach Schriftmetrik undletter-spacinggesetzt
Die Eigenschaft selbst ist schreibgeschützt, der Wert lässt sich aber über spacing.baseVal oder über setAttribute('spacing', …) ändern. Nützlich ist sie vor allem, um in Skripten den Zustand eines Textpfades auszulesen oder programmatisch zu wechseln.
Rückgabewert
baseVal und animVal (jeweils number: 0 = unknown, 1 = auto, 2 = exact).Beispiele
Aktuellen spacing-Wert auslesen
// <svg><path id="kurve" d="M10,90 Q100,10 190,90" fill="none"/>
// <text><textPath id="tp" href="#kurve" spacing="auto">Hallo Welt</textPath></text></svg>
const textPath = document.getElementById('tp');
console.log(textPath.spacing.baseVal);
console.log(textPath.spacing.animVal);
Zahlenwert in lesbaren Namen übersetzen
const spacingName = (el) => {
switch (el.spacing.baseVal) {
case SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO: return 'auto';
case SVGTextPathElement.TEXTPATH_SPACINGTYPE_EXACT: return 'exact';
default: return 'unknown';
}
};
const tp = document.createElementNS('http://www.w3.org/2000/svg', 'textPath');
console.log(spacingName(tp)); // kein Attribut -> Standardwert
tp.setAttribute('spacing', 'auto');
console.log(spacingName(tp));
spacing per baseVal umschalten
const tp = document.querySelector('textPath');
const toggleSpacing = () => {
const { AUTO, EXACT } = {
AUTO: SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO,
EXACT: SVGTextPathElement.TEXTPATH_SPACINGTYPE_EXACT
};
tp.spacing.baseVal = tp.spacing.baseVal === AUTO ? EXACT : AUTO;
console.log(tp.getAttribute('spacing'));
};
toggleSpacing();
// Wichtig · Fallstricke
- Die Eigenschaft
spacingist schreibgeschützt – eine Zuweisung wieel.spacing = 1wird ignoriert (im Strict ModeTypeError). Ändern Sie stattdessenspacing.baseValoder das Attribut. - Das Setzen von
baseValauf0(unknown) oder einen ungültigen Wert löst einenTypeErroraus. - Die DOM-Eigenschaft wird von allen modernen Browsern unterstützt, die visuelle Wirkung von
spacing="auto"ist jedoch uneinheitlich: Viele Browser rendernautoundexactidentisch. Für verlässliche Abstände besserletter-spacingodertextLength/lengthAdjustverwenden. - Fehlt das Attribut, liefert
baseValden Standardwert2(exact).