Signatur
Beschreibung
Die Eigenschaft x des Interfaces SVGFEComponentTransferElement spiegelt das x-Attribut des SVG-Elements <feComponentTransfer> wider. Zusammen mit y, width und height legt sie den Teilbereich des Filterprimitivs fest, also das Rechteck, auf das die Farbkomponenten-Transformation beschränkt wird.
Der Rückgabewert ist ein SVGAnimatedLength-Objekt. Über baseVal kommst du an den im Markup gesetzten (bzw. per Skript änderbaren) Grundwert, über animVal an den aktuell wirksamen, eventuell durch SMIL-Animation veränderten Wert. Beide sind SVGLength-Objekte mit Eigenschaften wie value, valueInSpecifiedUnits und unitType.
Die Eigenschaft selbst ist schreibgeschützt: Du kannst element.x kein neues Objekt zuweisen. Den Wert änderst du stattdessen über element.x.baseVal.value, baseVal.newValueSpecifiedUnits() oder direkt mit setAttribute("x", …). Wie der Wert interpretiert wird, hängt vom Attribut primitiveUnits des übergeordneten <filter> ab (userSpaceOnUse oder objectBoundingBox).
Rückgabewert
baseVal (Grundwert, SVGLength) und animVal (animierter Wert, SVGLength, schreibgeschützt) für die x-Koordinate des Teilbereichs des Filterprimitivs. Ist kein x-Attribut gesetzt, gilt als Standard 0%, der Teilbereich deckt also den gesamten Filterbereich ab.Beispiele
x-Koordinate eines feComponentTransfer auslesen
// Markup:
// <svg width="200" height="200">
// <filter id="f">
// <feComponentTransfer id="ct" x="20" y="10" width="100" height="100">
// <feFuncR type="linear" slope="2" />
// </feComponentTransfer>
// </filter>
// </svg>
const ct = document.getElementById("ct");
console.log(ct.x instanceof SVGAnimatedLength);
console.log(ct.x.baseVal.value);
console.log(ct.x.animVal.value);
Filterbereich per Skript verschieben
const ct = document.querySelector("feComponentTransfer");
// Wert in Benutzereinheiten setzen
ct.x.baseVal.value = 50;
console.log(ct.getAttribute("x"));
// Wert mit Einheit (Prozent) setzen
ct.x.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 25);
console.log(ct.getAttribute("x"));
Einheitentyp prüfen
const ct = document.querySelector("feComponentTransfer");
ct.setAttribute("x", "10%");
const { baseVal } = ct.x;
const isPercent = baseVal.unitType === SVGLength.SVG_LENGTHTYPE_PERCENTAGE;
console.log(isPercent, baseVal.valueInSpecifiedUnits);
// Wichtig · Fallstricke
- Schreibgeschützt:
ct.x = 10bleibt ohne Wirkung und wirft im Strict Mode einenTypeError. Ändere den Wert überct.x.baseValodersetAttribute. animValist immer schreibgeschützt. Schreibzugriffe darauf lösen eineDOMException(NoModificationAllowedError) aus.- Bei Prozentwerten oder relativen Einheiten kann
baseVal.valueje nach Browser vom Viewport-Kontext abhängen. Liegt das Element nicht im gerenderten Dokument, ist das Ergebnis unter Umständen ungenau oder0. - Die Bedeutung des Werts hängt von
primitiveUnitsam<filter>ab. BeiobjectBoundingBoxsteht0.2für 20 % der Bounding Box. - Kompatibilität: Die Eigenschaft wird seit Langem von allen modernen Browsern unterstützt (Chrome, Firefox, Safari, Edge). Sie wird über das Mixin
SVGFilterPrimitiveStandardAttributesbereitgestellt.