Signatur
Beschreibung
Die Eigenschaft values der Schnittstelle SVGFEColorMatrixElement spiegelt das Attribut values des SVG-Filterprimitivs <feColorMatrix> wider. Sie gibt ein SVGAnimatedNumberList-Objekt zurück, das über baseVal den im Markup gesetzten Grundwert und über animVal den aktuell animierten Wert bereitstellt.
Wie die Zahlenliste zu deuten ist, hängt vom Attribut type ab:
matrix: 20 Zahlen – eine 4×5-Matrix (Zeilen R, G, B, A; Spalten R, G, B, A, Versatz).saturate: eine Zahl zwischen0und1(Sättigung).hueRotate: eine Zahl in Grad (Farbtondrehung).luminanceToAlpha: keine Werte, das Attribut wird ignoriert.
Die Eigenschaft selbst ist schreibgeschützt – Sie können ihr kein neues Objekt zuweisen. Die enthaltene Liste baseVal lässt sich aber über Methoden wie clear(), appendItem() oder replaceItem() verändern. Für einfache Änderungen ist setAttribute("values", ...) oft bequemer.
Rückgabewert
baseVal (änderbare SVGNumberList) und animVal (schreibgeschützte, animierte SVGNumberList).Beispiele
Werte einer Farbmatrix auslesen
// <svg><filter id="f"><feColorMatrix id="cm" type="saturate" values="0.3"/></filter></svg>
const cm = document.getElementById("cm");
const list = cm.values.baseVal;
const zahlen = Array.from({ length: list.numberOfItems }, (_, i) => list.getItem(i).value);
console.log(cm.type.baseVal === SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE, zahlen);
Sättigung per Schieberegler steuern
// <input type="range" id="slider" min="0" max="1" step="0.01" value="1">
const cm = document.querySelector("#f feColorMatrix");
const slider = document.getElementById("slider");
const svg = cm.ownerSVGElement;
slider.addEventListener("input", () => {
const liste = cm.values.baseVal;
const zahl = svg.createSVGNumber();
zahl.value = Number(slider.value);
liste.clear();
liste.appendItem(zahl);
console.log(cm.getAttribute("values"));
});
Graustufen-Matrix per Skript setzen
const cm = document.createElementNS("http://www.w3.org/2000/svg", "feColorMatrix");
cm.setAttribute("type", "matrix");
const grau = [
0.2126, 0.7152, 0.0722, 0, 0,
0.2126, 0.7152, 0.0722, 0, 0,
0.2126, 0.7152, 0.0722, 0, 0,
0, 0, 0, 1, 0
];
cm.setAttribute("values", grau.join(" "));
console.log(cm.values.baseVal.numberOfItems);
// Wichtig · Fallstricke
- Schreibgeschützt:
cm.values = ...hat keine Wirkung (im strikten Modus kommt einTypeError). Ändern Sie stattdessenvalues.baseValoder setzen Sie das Attribut. animValist nur lesbar. Schreibzugriffe darauf werfen eineNoModificationAllowedError-DOMException.- Fehlt das Attribut, ist die Liste leer. Der Browser verwendet dann Standardwerte: Einheitsmatrix bei
matrix,1beisaturateund0beihueRotate. - Bei
type="matrix"mit einer anderen Anzahl als 20 Werten ist der Filter ungültig. Das Element wird dann meist so behandelt, als hätte es keine Wirkung. - Häufige Filter-Updates, etwa bei jedem
input-Event, können auf großen Flächen teuer sein. Bündeln Sie Änderungen bei Bedarf mitrequestAnimationFrame. - Die Eigenschaft wird von allen modernen Browsern unterstützt. Für einfache Effekte sind CSS-Filter wie
filter: saturate()oft die schlankere Wahl.