Signatur
Beschreibung
Die Eigenschaft stdDeviationX der Schnittstelle SVGFEDropShadowElement steht für die horizontale Standardabweichung des Gaußschen Weichzeichners, mit dem der Schlagschatten eines <feDropShadow>-Filterprimitivs weichgezeichnet wird. Je größer der Wert, desto weicher und breiter läuft der Schatten in X-Richtung aus.
Das Attribut stdDeviation kann eine oder zwei Zahlen enthalten. Bei zwei Werten (z. B. stdDeviation="4 1") ist der erste die X-Komponente. Bei nur einem Wert gilt er für beide Achsen, stdDeviationX und stdDeviationY liefern dann denselben Wert. Fehlt das Attribut, ist der Standardwert 2.
Die Eigenschaft selbst ist schreibgeschützt: Man kann ihr kein neues Objekt zuweisen. Sie gibt aber ein SVGAnimatedNumber-Objekt zurück. Dessen baseVal lässt sich lesen und auch schreiben. animVal enthält den aktuellen, möglicherweise durch SMIL-Animation veränderten Wert. Um beide Komponenten gleichzeitig zu setzen, ist die Methode setStdDeviation(x, y) der richtige Weg.
Rückgabewert
baseVal (Basiswert, schreibbar) und animVal (aktueller animierter Wert, nur lesbar) für die horizontale Standardabweichung.Beispiele
X-Unschärfe eines Schlagschattens auslesen
// <svg><filter id="shadow"><feDropShadow stdDeviation="6 2" dx="3" dy="3"/></filter></svg>
const shadow = document.querySelector('#shadow feDropShadow');
console.log(shadow.stdDeviationX.baseVal);
console.log(shadow.stdDeviationY.baseVal);
Nur ein Wert im Attribut: gilt für beide Achsen
const svgNS = 'http://www.w3.org/2000/svg';
const drop = document.createElementNS(svgNS, 'feDropShadow');
drop.setAttribute('stdDeviation', '4');
console.log(drop.stdDeviationX.baseVal, drop.stdDeviationY.baseVal);
Schattenunschärfe per Schieberegler steuern
// <input type="range" id="blur" min="0" max="20" value="2">
const drop = document.querySelector('#shadow feDropShadow');
const slider = document.querySelector('#blur');
slider.addEventListener('input', () => {
const x = Number(slider.value);
// Beide Komponenten gleichzeitig setzen; Y bleibt bei der Hälfte
drop.setStdDeviation(x, x / 2);
console.log(`X: ${drop.stdDeviationX.baseVal}, Attribut: ${drop.getAttribute('stdDeviation')}`);
});
Nur die X-Komponente über baseVal ändern
const drop = document.querySelector('#shadow feDropShadow');
drop.stdDeviationX.baseVal = 8; // Zuweisung an baseVal ist erlaubt
console.log(drop.getAttribute('stdDeviation'));
// Wichtig · Fallstricke
- Schreibgeschützt:
drop.stdDeviationX = 5hat keine Wirkung und wirft im Strict Mode einenTypeError. Ändern Sie stattdessenstdDeviationX.baseVal, rufen SiesetStdDeviation(x, y)auf oder setzen Sie das Attribut mitsetAttribute('stdDeviation', …). - Negative Werte sind ein Fehler und schalten das Filterprimitiv ab. Der Wert
0in einer Achse schaltet dort die Unschärfe ab. - Der Wert wird im Koordinatensystem von
primitiveUnitsdes Filters interpretiert, standardmäßig also in Benutzereinheiten. BeiprimitiveUnits="objectBoundingBox"sind es Bruchteile der Objektgröße. animValweicht nur während einer SMIL-Animation vonbaseValab. CSS-Animationen wirken sich hier nicht aus.- Große Unschärfe-Werte auf großen Flächen kosten beim Rendern viel Leistung. Das gilt besonders, wenn sie in Animationen laufend geändert werden.
- Die Unterstützung ist gut: Alle modernen Browser unterstützen
<feDropShadow>und diese Eigenschaft. Der Internet Explorer unterstützt sie nicht.