Signatur
Beschreibung
Die schreibgeschützte Eigenschaft specularConstant der Schnittstelle SVGFESpecularLightingElement gibt ein SVGAnimatedNumber-Objekt zurück. Es steht für den Wert ks im Phong-Beleuchtungsmodell, den das Attribut specularConstant des Elements <feSpecularLighting> festlegt. Dieser Faktor bestimmt, wie stark die Glanzlichter (spiegelnde Reflexionen) im Filterergebnis ausfallen.
Schreibgeschützt ist nur die Referenz auf das Objekt selbst. Über specularConstant.baseVal lässt sich der Grundwert lesen und schreiben. specularConstant.animVal liefert dagegen den aktuell wirksamen Wert, der sich z. B. durch eine SMIL-Animation (<animate>) ändern kann. Fehlt das Attribut, beträgt der Standardwert 1.
Die Eigenschaft ist praktisch, wenn du Licht- und Glanzeffekte per Skript steuern willst: etwa einen Glanz, der beim Überfahren mit der Maus stärker wird, oder ein Schieberegler, mit dem man die Reflexionsstärke live einstellt. Nach der SVG-Spezifikation sind nur nicht-negative Werte sinnvoll. Übliche Werte liegen zwischen 0 und etwa 10.
Rückgabewert
baseVal (Grundwert, beschreibbar, number) und animVal (aktuell animierter Wert, nur lesbar, number). Ohne gesetztes Attribut ist der Standardwert 1.Beispiele
Wert auslesen
// <svg><filter id="glanz"><feSpecularLighting id="spec" specularConstant="1.5" specularExponent="20"><fePointLight x="50" y="50" z="100"/></feSpecularLighting></filter></svg>
const spec = document.getElementById('spec');
console.log(spec.specularConstant.baseVal);
console.log(spec.specularConstant.animVal);
Standardwert ohne Attribut
const ns = 'http://www.w3.org/2000/svg';
const el = document.createElementNS(ns, 'feSpecularLighting');
console.log(el.specularConstant.baseVal);
Glanzstärke per Schieberegler steuern
// <input type="range" id="ks" min="0" max="5" step="0.1" value="1">
const spec = document.querySelector('#glanz feSpecularLighting');
const slider = document.getElementById('ks');
slider.addEventListener('input', () => {
// baseVal ist beschreibbar, auch wenn die Eigenschaft selbst readonly ist
spec.specularConstant.baseVal = Number(slider.value);
console.log('ks =', spec.getAttribute('specularConstant'));
});
Glanz beim Hover verstärken
const spec = document.querySelector('#glanz feSpecularLighting');
const target = document.getElementById('button-shape');
const normal = spec.specularConstant.baseVal;
target.addEventListener('mouseenter', () => {
spec.specularConstant.baseVal = normal * 2;
});
target.addEventListener('mouseleave', () => {
spec.specularConstant.baseVal = normal;
});
// Wichtig · Fallstricke
- Readonly bezieht sich nur auf die Objektreferenz:
spec.specularConstant = 2hat keine Wirkung und wirft im Strict Mode einenTypeError. Ändere den Wert stattdessen überspec.specularConstant.baseVal = 2odersetAttribute('specularConstant', '2'). animValist nur lesbar. Solange eine SMIL-Animation läuft, kann dieser Wert vonbaseValabweichen.- Negative Werte sind laut Spezifikation nicht sinnvoll. Je nach Browser wird der Filter dann fehlerhaft oder gar nicht gezeichnet.
- Leistung: Beleuchtungsfilter sind aufwendig zu berechnen. Wenn du den Wert oft änderst (z. B. bei jedem
input-Ereignis auf großen Flächen), kann das Neuzeichnen spürbar ruckeln. - Der Attributname unterscheidet Groß- und Kleinschreibung (
specularConstant). Bei in HTML eingebettetem SVG korrigiert der Parser die Schreibweise, beisetAttributein XML-Dokumenten musst du selbst darauf achten. - Die Eigenschaft funktioniert in allen modernen Browsern (Chrome, Edge, Firefox, Safari).