Start · Sprachen · JavaScript · Referenz · SVGFEDropShadowElement.setStdDeviation()

SVGFEDropShadowElement.setStdDeviation()

Methode

Setzt die Standardabweichung der Weichzeichnung eines <code>&lt;feDropShadow&gt;</code>-Filters, also das Attribut <code>stdDeviation</code>, getrennt für X- und Y-Richtung.

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

Signatur

SVGFEDropShadowElement.prototype.setStdDeviation(stdDeviationX, stdDeviationY)

Beschreibung

Die Methode setStdDeviation() des Interfaces SVGFEDropShadowElement legt fest, wie stark der Schlagschatten eines <feDropShadow>-Filterprimitivs weichgezeichnet wird. Sie schreibt dazu das Attribut stdDeviation. Die beiden Werte bestimmen die Standardabweichung der Gaußschen Weichzeichnung entlang der X- und der Y-Achse.

Sinnvoll ist die Methode immer dann, wenn sich die Weichheit eines Schattens zur Laufzeit ändern soll, etwa bei Hover-Effekten, Animationen oder wenn Nutzer den Wert per Schieberegler einstellen. Gegenüber setAttribute('stdDeviation', '…') übergibt man hier direkt Zahlen und muss keine Zeichenkette zusammenbauen.

Die aktuellen Werte liest man über die animierbaren Eigenschaften stdDeviationX und stdDeviationY aus, jeweils vom Typ SVGAnimatedNumber, z. B. el.stdDeviationX.baseVal. Beide Werte werden im Koordinatensystem angegeben, das durch primitiveUnits des umgebenden <filter> festgelegt ist.

Parameter

Name Typ Default Beschreibung
$stdDeviationX Pflicht number Standardabweichung der Weichzeichnung in X-Richtung. 0 schaltet die Weichzeichnung in dieser Richtung ab.
$stdDeviationY Pflicht number Standardabweichung der Weichzeichnung in Y-Richtung. Für eine gleichmäßige Weichzeichnung denselben Wert wie bei stdDeviationX übergeben.

Rückgabewert

Typ
void
Beschreibung
Kein Rückgabewert (undefined).

Beispiele

Schatten-Weichzeichnung per Skript setzen

const svgNS = 'http://www.w3.org/2000/svg';
const svg = document.createElementNS(svgNS, 'svg');
svg.setAttribute('width', '200');
svg.setAttribute('height', '120');

const filter = document.createElementNS(svgNS, 'filter');
filter.id = 'schatten';
const shadow = document.createElementNS(svgNS, 'feDropShadow');
shadow.setAttribute('dx', '4');
shadow.setAttribute('dy', '4');
shadow.setStdDeviation(3, 3);
filter.append(shadow);

const rect = document.createElementNS(svgNS, 'rect');
rect.setAttribute('x', '20');
rect.setAttribute('y', '20');
rect.setAttribute('width', '120');
rect.setAttribute('height', '60');
rect.setAttribute('fill', 'steelblue');
rect.setAttribute('filter', 'url(#schatten)');

svg.append(filter, rect);
document.body.append(svg);

console.log(shadow.getAttribute('stdDeviation'));
console.log(shadow.stdDeviationX.baseVal, shadow.stdDeviationY.baseVal);
3 3 3 3

Schatten-Weichheit per Schieberegler steuern

// HTML: <input type="range" id="blur" min="0" max="20" value="2">
//       <svg>…<feDropShadow id="ds" dx="3" dy="3" stdDeviation="2"/>…</svg>
const slider = document.querySelector('#blur');
const dropShadow = document.querySelector('#ds');

slider.addEventListener('input', () => {
  const wert = Number(slider.value);
  dropShadow.setStdDeviation(wert, wert);
});

Richtungsabhängige Weichzeichnung (Bewegungsunschärfe)

const ds = document.querySelector('feDropShadow');
// Stark horizontal, kaum vertikal weichzeichnen
ds.setStdDeviation(10, 1);
console.log(`X: ${ds.stdDeviationX.baseVal}, Y: ${ds.stdDeviationY.baseVal}`);
X: 10, Y: 1

// Wichtig · Fallstricke

  • Beide Argumente angeben: Laut Spezifikation sind beide Parameter Pflicht. Wer nur einen Wert übergibt, bekommt je nach Browser einen TypeError oder ein unerwartetes Ergebnis. Für eine gleichmäßige Weichzeichnung also denselben Wert zweimal übergeben.
  • Negative Werte sind ein Fehler. Der Filter wird dann nicht wie gewünscht gerendert, in manchen Browsern wird das Element sogar ausgeblendet. 0 ist erlaubt und ergibt einen harten Schatten.
  • Nur Basiswert: Die Methode ändert den Basiswert. Läuft gleichzeitig eine SMIL-Animation (<animate attributeName=\"stdDeviation\">), bestimmt sie den angezeigten Wert (animVal).
  • Leistung: Große Werte sind beim Rendern teuer. Werden sie bei jedem Frame geändert (z. B. in requestAnimationFrame), kann es auf schwächeren Geräten ruckeln.
  • Kompatibilität: <feDropShadow> und setStdDeviation() werden in allen aktuellen Browsern unterstützt, nicht aber im Internet Explorer. Als Ausweichlösung dient dort eine Kombination aus feGaussianBlur, feOffset und feMerge.