Signatur
Beschreibung
Die schreibgeschützte Eigenschaft y der Schnittstelle SVGFEComponentTransferElement steht für das SVG-Attribut y des Elements <feComponentTransfer>. Zusammen mit x, width und height legt es den Teilbereich fest, in dem das Filterprimitiv sein Ergebnis berechnet und ausgibt.
Zurückgegeben wird kein einfacher Zahlenwert, sondern ein SVGAnimatedLength-Objekt. Dessen Eigenschaft baseVal enthält den im Markup gesetzten Wert, animVal den aktuellen Wert, der durch SMIL-Animationen verändert sein kann. Beide sind SVGLength-Objekte mit value (in Benutzereinheiten), valueInSpecifiedUnits, unitType und valueAsString.
Wie der Wert gedeutet wird, hängt vom Attribut primitiveUnits des umgebenden <filter>-Elements ab. Bei userSpaceOnUse (Standard) gilt er im Benutzerkoordinatensystem. Bei objectBoundingBox ist er ein Bruchteil bzw. Prozentsatz der Begrenzungsbox des gefilterten Elements. Fehlt das Attribut, beträgt der Standardwert 0% relativ zum Filterbereich.
Die Eigenschaft ist nützlich, wenn du einen Filtereffekt per Skript nur auf einen Teil der Grafik anwenden willst, zum Beispiel bei einer Farbkorrektur, die von oben nach unten „einfährt“.
Rückgabewert
baseVal (statischer Wert) und animVal (animierter Wert, nur lesbar), jeweils vom Typ SVGLength. Es beschreibt die vertikale Koordinate des Teilbereichs des Filterprimitivs.Beispiele
y-Wert eines feComponentTransfer auslesen
// Markup:
// <svg width="200" height="200">
// <filter id="f" x="0" y="0" width="1" height="1">
// <feComponentTransfer id="ct" y="40" height="100">
// <feFuncR type="linear" slope="2" />
// </feComponentTransfer>
// </filter>
// <image href="foto.jpg" width="200" height="200" filter="url(#f)" />
// </svg>
const ct = document.getElementById('ct');
const { baseVal, animVal } = ct.y;
console.log(baseVal.value); // Wert in Benutzereinheiten
console.log(baseVal.valueAsString); // Original-Schreibweise
console.log(animVal.value);
Filterbereich per Skript verschieben
const ct = document.querySelector('feComponentTransfer');
// Direkt in Benutzereinheiten setzen
ct.y.baseVal.value = 80;
// Oder mit Einheit (Prozent) setzen
ct.y.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 25);
console.log(ct.getAttribute('y'));
Farbkorrektur von oben nach unten einblenden
const ct = document.querySelector('#ct');
const svgHeight = 200;
let pos = 0;
const step = () => {
pos += 2;
// Bereich schrumpft von oben: y wandert nach unten
ct.y.baseVal.value = svgHeight - pos;
ct.height.baseVal.value = pos;
if (pos < svgHeight) requestAnimationFrame(step);
};
requestAnimationFrame(step);
// Wichtig · Fallstricke
- Nur lesbar:
ct.y = 10hat keine Wirkung und wirft im strikten Modus einenTypeError. Ändere stattdessenct.y.baseVal.valueoder nutzesetAttribute('y', …). animValist immer schreibgeschützt. Schreibversuche darauf lösen eineNoModificationAllowedError-Ausnahme aus.- Bei
primitiveUnits="objectBoundingBox"wird ein Wert wie0.2als 20 % der Begrenzungsbox gedeutet.baseVal.valueliefert dann nicht die Pixelposition. - Prozentangaben beziehen sich auf die Höhe des Bezugssystems. Das Umrechnen in
valuekann einen Darstellungskontext erfordern. Bei nicht gerenderten Elementen können die Werte ungenau sein. - Der Teilbereich wird zusätzlich auf den Filterbereich des
<filter>-Elements beschnitten. Werte außerhalb davon wirken also nicht. - Kompatibilität: wird von allen modernen Browsern unterstützt, im Internet Explorer ab Version 10.