Start · Sprachen · JavaScript · Referenz · SVGFEDropShadowElement.result

SVGFEDropShadowElement.result

Eigenschaft

Schreibgeschützte Eigenschaft, die das <code>result</code>-Attribut eines <code>&lt;feDropShadow&gt;</code>-Elements als <code>SVGAnimatedString</code> liefert.

seit JavaScript Baseline: alle modernen Browser (Chrome, Edge, Fir Kategorie: webapi

Signatur

SVGFEDropShadowElement.result

Beschreibung

Die Eigenschaft result des Interfaces SVGFEDropShadowElement gibt das SVG-Attribut result eines <feDropShadow>-Filterprimitivs zurück. Über diesen Namen können nachfolgende Filterprimitive innerhalb desselben <filter>-Elements über ihr in- oder in2-Attribut auf das erzeugte Schattenbild zugreifen, zum Beispiel in <feMerge> oder <feComposite>.

Der Rückgabewert ist kein einfacher String, sondern ein SVGAnimatedString-Objekt. Den aktuell gesetzten Attributwert liest und schreibt man über baseVal. animVal enthält den Wert, der sich gerade aus einer eventuellen SMIL-Animation ergibt, und kann nur gelesen werden.

Schreibgeschützt ist nur die Eigenschaft selbst: Man kann ihr kein neues Objekt zuweisen. Den Namen ändert man über element.result.baseVal = "neuerName" oder mit setAttribute("result", …). Das ist praktisch, wenn Filterketten dynamisch aufgebaut oder umverdrahtet werden sollen.

Rückgabewert

Typ
SVGAnimatedString
Beschreibung
Ein Objekt mit baseVal (lesbar und schreibbar, entspricht dem Attribut result) und animVal (nur lesbar, animierter Wert). Fehlt das Attribut, ist baseVal ein leerer String.

Beispiele

Namen des Schatten-Ergebnisses auslesen

// <svg><filter id="schatten"><feDropShadow id="ds" dx="2" dy="2" stdDeviation="3" result="schattenBild"/></filter></svg>
const dropShadow = document.getElementById('ds');
console.log(dropShadow.result instanceof SVGAnimatedString);
console.log(dropShadow.result.baseVal);
console.log(dropShadow.result.animVal);
true schattenBild schattenBild

Element per Skript erzeugen und in einer Filterkette weiterverwenden

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

const shadow = document.createElementNS(SVG_NS, 'feDropShadow');
shadow.setAttribute('stdDeviation', '4');
shadow.setAttribute('flood-color', 'gold');
shadow.result.baseVal = 'leuchten'; // setzt das Attribut result

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

filter.append(shadow, merge);
document.querySelector('svg defs').append(filter);
console.log(shadow.getAttribute('result'));
leuchten

Fehlendes Attribut erkennen und Zuweisung an die Eigenschaft

const el = document.createElementNS('http://www.w3.org/2000/svg', 'feDropShadow');
console.log(JSON.stringify(el.result.baseVal));

// Eine direkte Zuweisung an die Eigenschaft hat keine Wirkung
el.result = 'x';
console.log(el.result instanceof SVGAnimatedString, el.getAttribute('result'));
"" true null

// Wichtig · Fallstricke

  • Häufiger Fehler: el.result = "name" tut nichts, weil die Eigenschaft schreibgeschützt ist. Im Strict Mode wirft die Zuweisung einen TypeError. Richtig ist el.result.baseVal = "name".
  • Namen gelten nur innerhalb desselben <filter>. Kommt ein Name mehrfach vor, verweisen spätere in-Attribute auf das zuletzt davor definierte Ergebnis.
  • Verweist in auf einen Namen, den es nicht gibt, nimmt der Browser das Ergebnis des vorherigen Primitivs (beim ersten Primitiv SourceGraphic). Es erscheint keine Fehlermeldung, was die Fehlersuche erschwert.
  • SVG-Elemente müssen mit createElementNS und dem SVG-Namensraum erzeugt werden. Sonst gibt es keine result-Eigenschaft.
  • feDropShadow und damit dieses Interface werden in allen modernen Browsern unterstützt. Ältere Versionen von Edge (EdgeHTML) und der Internet Explorer kennen es nicht.