Signatur
Beschreibung
Die schreibgeschützte Eigenschaft surfaceScale der Schnittstelle SVGFESpecularLightingElement gibt ein SVGAnimatedNumber-Objekt zurück. Es steht für das Attribut surfaceScale des zugehörigen <feSpecularLighting>-Filterprimitivs.
Das Attribut legt fest, wie stark der Alphakanal der Eingabegrafik als Höhenkarte (Bump Map) gedeutet wird. Die Höhe jedes Pixels ist surfaceScale × Alpha. Größere Werte ergeben also eine plastischere Oberfläche mit deutlicheren Glanzlichtern und Kanten. Fehlt das Attribut, gilt der Standardwert 1.
„Schreibgeschützt“ heißt hier nur, dass du der Eigenschaft selbst kein neues Objekt zuweisen kannst. Den Wert änderst du über surfaceScale.baseVal. Den aktuell wirksamen Wert, auch während einer SMIL-Animation, liest du über surfaceScale.animVal. So lassen sich Licht- und Prägeeffekte per Skript steuern, etwa mit einem Schieberegler.
Rückgabewert
baseVal (änderbarer Grundwert, number) und animVal (aktuell wirksamer Wert, schreibgeschützt). Standardwert: 1.Beispiele
Wert auslesen
// HTML: <svg><filter id="glanz"><feSpecularLighting id="licht" surfaceScale="5" specularExponent="20"><fePointLight x="50" y="50" z="100"/></feSpecularLighting></filter></svg>
const licht = document.getElementById('licht');
console.log(licht.surfaceScale.baseVal);
console.log(licht.surfaceScale.animVal);
Prägetiefe per Schieberegler steuern
const licht = document.querySelector('#glanz feSpecularLighting');
const regler = document.querySelector('#tiefe'); // <input type="range" id="tiefe" min="0" max="20" step="0.5">
regler.addEventListener('input', () => {
// baseVal ist beschreibbar, das Attribut wird dabei mitgeändert
licht.surfaceScale.baseVal = Number(regler.value);
console.log(licht.getAttribute('surfaceScale'));
});
Element dynamisch erzeugen und Standardwert prüfen
const SVG_NS = 'http://www.w3.org/2000/svg';
const spec = document.createElementNS(SVG_NS, 'feSpecularLighting');
console.log(spec.surfaceScale.baseVal); // Standardwert ohne Attribut
spec.setAttribute('surfaceScale', '3');
console.log(spec.surfaceScale.baseVal);
// Wichtig · Fallstricke
- Kein direktes Zuweisen:
el.surfaceScale = 5hat keine Wirkung (im Strict Mode gibt es einenTypeError). Verwende stattdessenel.surfaceScale.baseVal = 5. animValist immer schreibgeschützt. Es kann während einer<animate>-Animation vonbaseValabweichen.- Den Attributnamen in camelCase schreiben (
surfaceScale). BeicreateElementNSmuss der ElementnamefeSpecularLightinggenau so geschrieben sein, sonst entsteht keinSVGFESpecularLightingElement. - Negative Werte sind erlaubt und kehren den Effekt um: Die Oberfläche wirkt dann eingedrückt statt erhaben.
- Größere Filterflächen neu zu berechnen ist aufwendig. Häufige Änderungen, etwa in einer
input-Schleife, können die Darstellung spürbar bremsen. - Die Eigenschaft wird von allen modernen Browsern unterstützt.