Start · Sprachen · JavaScript · Referenz · SVGFEComponentTransferElement.in1

SVGFEComponentTransferElement.in1

Eigenschaft

Schreibgeschützte Eigenschaft, die das <code>in</code>-Attribut eines <code>&lt;feComponentTransfer&gt;</code>-Elements als <code>SVGAnimatedString</code> widerspiegelt.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

SVGFEComponentTransferElement.in1

Beschreibung

Die Eigenschaft in1 der Schnittstelle SVGFEComponentTransferElement gibt ein SVGAnimatedString-Objekt zurück. Es steht für das in-Attribut des zugehörigen <feComponentTransfer>-Filterprimitivs. Dieses Attribut legt fest, welche Eingabe der Filter verarbeitet. Das kann ein Schlüsselwort wie SourceGraphic, SourceAlpha, BackgroundImage, BackgroundAlpha, FillPaint oder StrokePaint sein, oder der result-Name eines vorherigen Filterprimitivs.

Die Eigenschaft selbst ist schreibgeschützt, Sie können ihr also kein neues Objekt zuweisen. Über in1.baseVal können Sie den Attributwert aber lesen und ändern. in1.animVal liefert den aktuellen, eventuell animierten Wert und ist nur lesbar.

Nützlich ist in1, wenn Sie Filterketten per Skript prüfen oder zur Laufzeit umbauen wollen. Ein Beispiel ist ein Umschalter, der die Farbkorrektur entweder auf die Originalgrafik oder auf das Ergebnis eines vorgeschalteten Weichzeichners anwendet.

Der Name heißt in1 statt in, weil in in JavaScript ein reserviertes Schlüsselwort ist (Operator in).

Rückgabewert

Typ
SVGAnimatedString
Beschreibung
Ein Objekt mit baseVal (lesbarer und schreibbarer Attributwert, string) und animVal (nur lesbarer, animierter Wert, string). Fehlt das Attribut, sind beide Werte ein leerer String.

Beispiele

Eingabe eines feComponentTransfer auslesen

// HTML: <svg><filter id="f"><feGaussianBlur in="SourceGraphic" stdDeviation="3" result="blur"/>
//   <feComponentTransfer id="ct" in="blur"><feFuncR type="linear" slope="1.5"/></feComponentTransfer></filter></svg>
const ct = document.getElementById('ct');
console.log(ct.in1 instanceof SVGAnimatedString);
console.log(ct.in1.baseVal);
console.log(ct.in1.animVal);
true blur blur

Filtereingabe zur Laufzeit umschalten

const ct = document.querySelector('#f feComponentTransfer');
const toggle = document.getElementById('blurToggle');

toggle.addEventListener('change', () => {
  // Farbkorrektur auf weichgezeichnetes Bild oder auf das Original anwenden
  ct.in1.baseVal = toggle.checked ? 'blur' : 'SourceGraphic';
  console.log(ct.getAttribute('in'));
});
SourceGraphic (nach Abwahl der Checkbox)

Filter komplett per Skript erzeugen

const NS = 'http://www.w3.org/2000/svg';
const svg = document.querySelector('svg');
const filter = document.createElementNS(NS, 'filter');
filter.id = 'invert';

const ct = document.createElementNS(NS, 'feComponentTransfer');
ct.in1.baseVal = 'SourceGraphic'; // setzt das Attribut in="SourceGraphic"

for (const ch of ['R', 'G', 'B']) {
  const fn = document.createElementNS(NS, `feFunc${ch}`);
  fn.setAttribute('type', 'table');
  fn.setAttribute('tableValues', '1 0'); // Farbe invertieren
  ct.append(fn);
}

filter.append(ct);
svg.querySelector('defs')?.append(filter) ?? svg.prepend(filter);
document.querySelector('image').setAttribute('filter', 'url(#invert)');
console.log(ct.outerHTML.startsWith('<feComponentTransfer in="SourceGraphic"'));
true

// Wichtig · Fallstricke

  • Schreibgeschützt: ct.in1 = 'blur' schlägt fehl (im Strict Mode mit einem TypeError). Ändern Sie stattdessen ct.in1.baseVal oder rufen Sie setAttribute('in', …) auf.
  • Leerer Wert: Fehlt in, gibt baseVal einen leeren String zurück. Der Filter verwendet dann das Ergebnis des vorherigen Primitivs, beim ersten Primitiv SourceGraphic.
  • Unbekannte Referenz: Verweist in auf einen result-Namen, den es nicht gibt, wird der Wert wie ein fehlendes Attribut behandelt. Der Browser meldet dabei keinen Fehler.
  • BackgroundImage und BackgroundAlpha werden von den meisten Browsern nicht unterstützt.
  • Elemente müssen mit createElementNS im SVG-Namensraum erzeugt werden. Sonst gibt es keine in1-Eigenschaft.
  • Kompatibilität: wird in allen aktuellen Browsern unterstützt (Chrome, Firefox, Safari, Edge).