Signatur
Beschreibung
Die schreibgeschützte Eigenschaft diffuseConstant der Schnittstelle SVGFEDiffuseLightingElement gibt ein SVGAnimatedNumber-Objekt zurück. Es entspricht dem Attribut diffuseConstant des Filterprimitivs <feDiffuseLighting>. Dieser Wert ist der Faktor kd im Phong-Beleuchtungsmodell und bestimmt, wie stark das diffus reflektierte Licht ausfällt.
Schreibgeschützt ist nur die Eigenschaft selbst, also die Referenz auf das SVGAnimatedNumber-Objekt. Über diffuseConstant.baseVal liest und setzt du den statischen Grundwert. diffuseConstant.animVal liefert den aktuellen, möglicherweise per SMIL animierten Wert und lässt sich nur lesen.
Die Eigenschaft eignet sich, um Lichteffekte dynamisch zu steuern, etwa für interaktive Relief- oder Prägeeffekte, Hover-Hervorhebungen oder das Anpassen der Helligkeit über einen Schieberegler. Ist das Attribut nicht gesetzt, gilt der Standardwert 1.
Rückgabewert
baseVal (lesbar und schreibbar, number) und animVal (nur lesbar, number). Ohne gesetztes Attribut ist der Wert 1.Beispiele
Aktuellen Wert auslesen
// <svg><filter id="licht"><feDiffuseLighting id="diffus" diffuseConstant="1.5" lighting-color="white"><fePointLight x="50" y="50" z="40"/></feDiffuseLighting></filter></svg>
const diffus = document.getElementById('diffus');
console.log(diffus.diffuseConstant.baseVal);
console.log(diffus.diffuseConstant.animVal);
Helligkeit per Schieberegler steuern
const diffus = document.querySelector('feDiffuseLighting');
const regler = document.querySelector('#helligkeit'); // <input type="range" min="0" max="5" step="0.1">
regler.addEventListener('input', () => {
diffus.diffuseConstant.baseVal = Number(regler.value);
// Das Attribut im DOM wird automatisch aktualisiert
console.log(diffus.getAttribute('diffuseConstant'));
});
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 = 'relief';
const licht = document.createElementNS(NS, 'feDiffuseLighting');
console.log(licht.diffuseConstant.baseVal); // Standardwert
licht.diffuseConstant.baseVal = 2;
const quelle = document.createElementNS(NS, 'feDistantLight');
quelle.setAttribute('azimuth', '45');
quelle.setAttribute('elevation', '60');
licht.append(quelle);
filter.append(licht);
svg.append(filter);
console.log(licht.getAttribute('diffuseConstant'));
// Wichtig · Fallstricke
- Keine direkte Zuweisung:
el.diffuseConstant = 2hat keine Wirkung, im Strict Mode wirft es sogar einenTypeError. Setze den Wert immer überel.diffuseConstant.baseVal. - Wertebereich: Laut Spezifikation muss der Wert nicht negativ sein. Negative Werte gelten als Fehler, und die Browser deaktivieren dann meist den Filtereffekt oder verwenden den Standardwert.
animValist nur lesbar: Er spiegelt SMIL-Animationen wider, zum Beispiel über<animate attributeName=\"diffuseConstant\">. Änderungen über CSS-Animationen erscheinen dort nicht.- Groß- und Kleinschreibung: Der Attributname lautet in camelCase
diffuseConstant. In XML- oder XHTML-Dokumenten muss die Schreibweise exakt stimmen. - Leistung: Beleuchtungsfilter sind rechenintensiv. Häufige Änderungen, etwa bei jedem
mousemove, solltest du überrequestAnimationFramedrosseln. - Kompatibilität: Alle modernen Browser unterstützen die Eigenschaft.