Signatur
Beschreibung
Die schreibgeschützte Eigenschaft result der Schnittstelle SVGFEComponentTransferElement spiegelt das SVG-Attribut result des Elements <feComponentTransfer> wider. Der Wert ist ein SVGAnimatedString-Objekt. Es hat zwei Eigenschaften: baseVal (der im Markup gesetzte, beschreibbare Wert) und animVal (der aktuelle, ggf. durch SMIL-Animation veränderte Wert, nur lesbar).
Über den Namen in result können nachfolgende Filterprimitive innerhalb desselben <filter> das Ausgabebild dieses Primitivs über ihr Attribut in oder in2 ansprechen. So baust du Filterketten, in denen zum Beispiel eine Tonwertkorrektur per feComponentTransfer zuerst ausgeführt und danach mit dem Originalbild verrechnet wird.
„Schreibgeschützt“ bezieht sich nur auf die Eigenschaft selbst: Du kannst ihr kein neues Objekt zuweisen. Den Namen änderst du über result.baseVal oder mit setAttribute("result", …). Fehlt das Attribut, ist baseVal ein leerer String. Das Ergebnis ist dann nur implizit als Eingabe des direkt folgenden Primitivs verfügbar.
Rückgabewert
baseVal (Attributwert als string, beschreibbar) und animVal (animierter Wert, nur lesbar). Ohne gesetztes Attribut ist baseVal ein leerer String.Beispiele
Ergebnisnamen auslesen
// <filter id="f"><feComponentTransfer id="ct" result="hell">…</feComponentTransfer></filter>
const ct = document.getElementById('ct');
console.log(ct.result instanceof SVGAnimatedString);
console.log(ct.result.baseVal);
console.log(ct.result.animVal);
Filterkette per Skript erzeugen und verknüpfen
const NS = 'http://www.w3.org/2000/svg';
const svg = document.querySelector('svg');
const filter = document.createElementNS(NS, 'filter');
filter.id = 'kontrast';
const ct = document.createElementNS(NS, 'feComponentTransfer');
ct.setAttribute('in', 'SourceGraphic');
ct.result.baseVal = 'korrigiert'; // Name setzen
['feFuncR', 'feFuncG', 'feFuncB'].forEach((tag) => {
const fn = document.createElementNS(NS, tag);
fn.setAttribute('type', 'linear');
fn.setAttribute('slope', '1.5');
fn.setAttribute('intercept', '-0.25');
ct.append(fn);
});
const blend = document.createElementNS(NS, 'feBlend');
blend.setAttribute('in', ct.result.baseVal); // Ergebnis referenzieren
blend.setAttribute('in2', 'SourceGraphic');
blend.setAttribute('mode', 'multiply');
filter.append(ct, blend);
svg.querySelector('defs').append(filter);
console.log(ct.getAttribute('result'));
Fehlendes result-Attribut erkennen
const transfers = document.querySelectorAll('feComponentTransfer');
transfers.forEach((el, i) => {
const name = el.result.baseVal || '(unbenannt)';
console.log(`Primitiv ${i}: ${name}`);
});
// Wichtig · Fallstricke
- Eine direkte Zuweisung wie
el.result = 'x'ändert nichts; im Strict Mode kann sie sogar einenTypeErrorauslösen. Ändere stattdessenel.result.baseVal. animValist nur lesbar und weicht nur bei laufender SMIL-Animation (<animate attributeName=\"result\">) vonbaseValab.- Die Namen in
resultgelten nur innerhalb desselben<filter>. Tragen mehrere Primitive denselben Namen, bezieht sich ein späteresinauf das zuletzt davor definierte Primitiv mit diesem Namen. - Verweist
inauf einen Namen, den es nicht gibt, verwenden Browser je nach Implementierung das vorherige Ergebnis oderSourceGraphic. Bei tippfehleranfälligen Namen lohnt sich deshalb eine Prüfung per Skript. - Elemente musst du mit
createElementNSim SVG-Namensraum erzeugen, sonst fehlt die Eigenschaftresult. - Die Eigenschaft wird von allen modernen Browsern unterstützt. Sie ist Teil von
SVGFilterPrimitiveStandardAttributesund existiert gleichermaßen bei allenSVGFE*Element-Schnittstellen.