Start · Sprachen · JavaScript · Referenz · SVGFEOffsetElement.in1

SVGFEOffsetElement.in1

Eigenschaft

Die schreibgeschützte Eigenschaft <code>in1</code> liefert ein <code>SVGAnimatedString</code>, das das <code>in</code>-Attribut eines <code>&lt;feOffset&gt;</code>-Elements widerspiegelt.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

SVGFEOffsetElement.in1

Beschreibung

Die Eigenschaft in1 des Interfaces SVGFEOffsetElement steht für das in-Attribut eines <feOffset>-Filterprimitivs. Dieses Attribut legt fest, welche Eingabe verschoben wird: ein Schlüsselwort wie SourceGraphic, SourceAlpha, BackgroundImage, BackgroundAlpha, FillPaint oder StrokePaint oder das result eines vorherigen Filterprimitivs.

Der Name heißt in1 statt in, weil in in JavaScript ein reserviertes Schlüsselwort ist (Operator in). Die Eigenschaft selbst ist schreibgeschützt. Sie gibt ein SVGAnimatedString-Objekt zurück. Über baseVal lässt sich der Attributwert lesen und schreiben, animVal enthält den aktuell animierten Wert.

Gebraucht wird in1 vor allem, wenn Filterketten dynamisch aufgebaut oder umverdrahtet werden. Ein typischer Fall ist ein Schlagschatten, bei dem feOffset je nach Zustand die Alpha-Maske (SourceAlpha) oder ein weichgezeichnetes Zwischenergebnis verschiebt.

Rückgabewert

Typ
SVGAnimatedString
Beschreibung
Ein Objekt mit baseVal (lesbar und schreibbar, entspricht dem Attribut in) und animVal (nur lesbar, aktueller animierter Wert). Ist das Attribut nicht gesetzt, ist baseVal ein leerer String.

Beispiele

Eingabe eines feOffset auslesen

// <filter id="shadow"><feOffset id="off" in="SourceAlpha" dx="4" dy="4"/></filter>
const offset = document.getElementById('off');
console.log(offset instanceof SVGFEOffsetElement);
console.log(offset.in1.baseVal);
console.log(offset.in1.animVal);
true SourceAlpha SourceAlpha

Schlagschatten-Filter dynamisch erzeugen

const SVG_NS = 'http://www.w3.org/2000/svg';
const svg = document.querySelector('svg');

const filter = document.createElementNS(SVG_NS, 'filter');
filter.id = 'dropShadow';

const blur = document.createElementNS(SVG_NS, 'feGaussianBlur');
blur.in1.baseVal = 'SourceAlpha';
blur.stdDeviationX.baseVal; // nur lesbar – Wert per Attribut setzen
blur.setAttribute('stdDeviation', '3');
blur.result.baseVal = 'blurred';

const offset = document.createElementNS(SVG_NS, 'feOffset');
offset.in1.baseVal = 'blurred'; // Ergebnis des Blurs verschieben
offset.dx.baseVal = 5;
offset.dy.baseVal = 5;
offset.result.baseVal = 'shadow';

const merge = document.createElementNS(SVG_NS, 'feMerge');
for (const src of ['shadow', 'SourceGraphic']) {
  const node = document.createElementNS(SVG_NS, 'feMergeNode');
  node.in1.baseVal = src;
  merge.append(node);
}

filter.append(blur, offset, merge);
svg.querySelector('defs').append(filter);
console.log(offset.getAttribute('in'));
blurred

Eingabe per Schalter umschalten

const offset = document.querySelector('#shadow feOffset');
const toggle = document.querySelector('#hardShadow');

toggle.addEventListener('change', () => {
  // Harter Schatten: direkt die Alpha-Maske; weicher: Blur-Ergebnis
  offset.in1.baseVal = toggle.checked ? 'SourceAlpha' : 'blurred';
  console.log(`feOffset nutzt jetzt: ${offset.in1.baseVal}`);
});
feOffset nutzt jetzt: SourceAlpha

// Wichtig · Fallstricke

  • offset.in1 = 'SourceAlpha' hat keine Wirkung (im Strict Mode gibt es einen TypeError), weil die Eigenschaft schreibgeschützt ist. Ändern lässt sich der Wert nur über in1.baseVal oder setAttribute('in', …).
  • Fehlt in, nimmt das erste Primitiv im Filter SourceGraphic. Jedes weitere Primitiv nimmt das Ergebnis des vorherigen. baseVal ist dann trotzdem ein leerer String.
  • Verweist in auf ein result, das es nicht gibt, fällt der Browser auf das Standardverhalten zurück. Eine Fehlermeldung gibt es nicht, was die Fehlersuche erschwert.
  • BackgroundImage, BackgroundAlpha, FillPaint und StrokePaint unterstützen die meisten Browser kaum oder gar nicht. In der Praxis sollte man sich auf SourceGraphic, SourceAlpha und benannte Ergebnisse verlassen.
  • SVG-Elemente immer mit createElementNS und dem SVG-Namensraum erzeugen. Sonst entsteht kein SVGFEOffsetElement und in1 ist undefined.
  • Die Eigenschaft wird in allen modernen Browsern unterstützt.