Signatur
Beschreibung
baseVal ist eine schreibgeschützte Eigenschaft des Interfaces SVGAnimatedLengthList. Sie gibt ein SVGLengthList-Objekt zurück. Dieses Objekt steht für den Basiswert eines animierbaren Attributs, das eine Liste von <length>-, <percentage>- oder <number>-Werten erwartet. Typische Beispiele sind die Attribute x, y, dx und dy der Elemente <text> und <tspan>. Mit mehreren Werten lässt sich dort jedes Zeichen einzeln positionieren.
Der Basiswert ist genau das, was im Markup steht bzw. per setAttribute() gesetzt wurde. Laufende SMIL-Animationen (<animate>) ändern ihn nicht. Den aktuell angezeigten, animierten Wert liefert dagegen animVal.
Schreibgeschützt ist nur die Eigenschaft selbst: Man kann ihr kein neues Objekt zuweisen. Die zurückgegebene Liste ist aber live und veränderbar. Methoden wie appendItem(), replaceItem(), removeItem(), clear() oder initialize() ändern das zugehörige Attribut sofort. Umgekehrt spiegeln sich Änderungen am Attribut direkt in der Liste wider. Das ist praktisch, wenn Positionen numerisch und mit Einheiten verarbeitet werden sollen, ohne Attribut-Strings selbst zu zerlegen.
Rückgabewert
SVGLengthList mit SVGLength-Objekten für den nicht animierten Attributwert. Wichtige Eigenschaften und Methoden sind numberOfItems bzw. length und getItem(index). Jedes SVGLength hat unter anderem value (in Benutzereinheiten), unitType und valueAsString.Beispiele
x-Positionen eines Textes auslesen
// <svg><text id="label" x="10 20 5em" y="30">ABC</text></svg>
const text = document.getElementById('label');
const list = text.x.baseVal; // SVGLengthList
for (let i = 0; i < list.numberOfItems; i++) {
const len = list.getItem(i);
console.log(i, len.valueAsString, len.unitType);
}
Zeichen einzeln positionieren (Liste verändern)
const svg = document.querySelector('svg');
const text = document.getElementById('label');
const xs = text.x.baseVal;
xs.clear();
// Jedes Zeichen 15 Einheiten weiter rechts platzieren
[...text.textContent].forEach((_, i) => {
const len = svg.createSVGLength();
len.value = 10 + i * 15;
xs.appendItem(len);
});
console.log(text.getAttribute('x'));
Basiswert und animierten Wert vergleichen
// <text id="t" x="10" y="40">Hallo
// <animate attributeName="x" from="10" to="200" dur="2s" fill="freeze"/>
// </text>
const t = document.getElementById('t');
setTimeout(() => {
console.log('baseVal:', t.x.baseVal.getItem(0).value);
console.log('animVal:', t.x.animVal.getItem(0).value);
}, 2500);
// Wichtig · Fallstricke
- Nur lesend zuweisbar:
text.x.baseVal = …schlägt fehl bzw. hat keine Wirkung. Ändern Sie stattdessen den Inhalt der Liste oder setzen Sie das Attribut mitsetAttribute(). - Leere Liste: Fehlt das Attribut, ist
numberOfItemsgleich0.getItem(0)wirft dann einenIndexSizeError. - Objekte aus einer anderen Liste: Fügt man ein
SVGLengthein, das schon zu einer anderen Liste gehört, wird laut Spezifikation eine Kopie eingefügt. Spätere Änderungen am ursprünglichen Objekt wirken sich dann nicht mehr aus. - Relative Einheiten: Bei Prozent- oder
em-Werten hängtvaluevom Viewport bzw. von der Schriftgröße ab. Ist das Element nicht gerendert, kann der Wert0sein oder ungenau ausfallen. - Kompatibilität: Wird von allen modernen Browsern unterstützt.
SVGLengthList.lengthist neuer alsnumberOfItems. Für ältere Umgebungen istnumberOfItemsdie sicherere Wahl.