Signatur
Beschreibung
Die Methode clear() der Schnittstelle SVGTransformList löscht alle SVGTransform-Objekte aus der Liste. Danach ist numberOfItems (bzw. length) gleich 0. Die Liste bleibt als Objekt bestehen und lässt sich weiter mit appendItem() oder initialize() befüllen.
Normalerweise erreicht man die Liste über element.transform.baseVal. Diese Liste ist direkt an das Attribut transform gekoppelt: Ein Aufruf von clear() ändert das Attribut sofort, und das Element wird ohne Transformation dargestellt, also im ursprünglichen Koordinatensystem.
Einsatzfälle:
- Transformationen zurücksetzen, etwa bei einem „Reset“-Knopf in einem SVG-Editor.
- Die Liste leeren und danach eine neue Folge von Transformationen aufbauen, ohne Zeichenketten zu parsen.
- Transformationen einer Animation aufräumen, bevor ein neuer Zustand gesetzt wird.
Beispiele
Alle Transformationen eines Rechtecks zurücksetzen
const svgNS = 'http://www.w3.org/2000/svg';
const svg = document.createElementNS(svgNS, 'svg');
const rect = document.createElementNS(svgNS, 'rect');
rect.setAttribute('width', '50');
rect.setAttribute('height', '50');
rect.setAttribute('transform', 'translate(20, 10) rotate(45) scale(2)');
svg.append(rect);
document.body.append(svg);
const list = rect.transform.baseVal;
console.log(list.numberOfItems);
list.clear();
console.log(list.numberOfItems);
console.log(rect.getAttribute('transform'));
Liste leeren und neu aufbauen
const svgNS = 'http://www.w3.org/2000/svg';
const svg = document.createElementNS(svgNS, 'svg');
const circle = document.createElementNS(svgNS, 'circle');
circle.setAttribute('r', '10');
circle.setAttribute('transform', 'skewX(30) scale(3)');
svg.append(circle);
document.body.append(svg);
const list = circle.transform.baseVal;
list.clear();
// Neue Transformationen über SVGTransform-Objekte anlegen
const move = svg.createSVGTransform();
move.setTranslate(100, 50);
const turn = svg.createSVGTransform();
turn.setRotate(90, 0, 0);
list.appendItem(move);
list.appendItem(turn);
console.log(list.numberOfItems);
console.log(circle.getAttribute('transform'));
Reset-Knopf in einem einfachen SVG-Editor
const shape = document.querySelector('#shape');
const resetButton = document.querySelector('#reset');
resetButton.addEventListener('click', () => {
const list = shape.transform.baseVal;
if (list.numberOfItems > 0) {
list.clear();
console.log('Transformationen entfernt');
}
});
// Wichtig · Fallstricke
- Nur
baseValist veränderbar: Wirdclear()aufelement.transform.animValaufgerufen, wirft der Browser eineDOMExceptionmit dem NamenNoModificationAllowedError, weil diese Liste schreibgeschützt ist. - CSS-Transformationen bleiben:
clear()betrifft nur das SVG-Attributtransform. Eine per CSS gesetzte Eigenschafttransform(z. B.style.transform) hat Vorrang und wird nicht entfernt. - Verweise werden gelöst: Vorher geholte
SVGTransform-Objekte gehören danach nicht mehr zur Liste. Wenn man sie später ändert, wirkt sich das nicht mehr auf das Element aus. - Wert des Attributs: Ob das Attribut danach leer ist oder ganz fehlt, unterscheidet sich zwischen den Browsern. Man sollte sich nicht auf eine bestimmte Form verlassen.
- Kompatibilität: Wird von allen modernen Browsern unterstützt.
lengthals Alias fürnumberOfItemsgibt es erst in neueren Versionen.