Signatur
Beschreibung
Die Eigenschaft z der Schnittstelle SVGFESpotLightElement steht für das Attribut z des SVG-Elements <feSpotLight>. Sie gibt die Position der Spotlicht-Quelle auf der Z-Achse an, also wie weit sie „über“ der Zeichenfläche liegt. Zusammen mit x und y legt sie die Position der Lichtquelle im Koordinatensystem fest, das über primitiveUnits des umgebenden <filter>-Elements bestimmt wird.
Der Rückgabewert ist ein SVGAnimatedNumber-Objekt. Über baseVal liest und setzt man den statischen Attributwert, animVal liefert den aktuellen (ggf. per SMIL animierten) Wert und ist schreibgeschützt. Die Eigenschaft z selbst lässt sich nicht neu zuweisen.
Man nutzt z vor allem, um Licht-Effekte in <feDiffuseLighting> oder <feSpecularLighting> dynamisch zu steuern, z. B. um die Lichtquelle interaktiv anzuheben oder abzusenken. Ein größerer Z-Wert führt zu flacherem, gleichmäßigerem Licht, ein kleiner Wert zu einem stärker streifenden Lichteinfall.
Rückgabewert
baseVal (lesbar/schreibbar, number) und animVal (nur lesbar, number). Standardwert des Attributs ist 0.Beispiele
Z-Position einer Spotlicht-Quelle auslesen
// HTML: <svg><filter id="licht"><feSpecularLighting><feSpotLight id="spot" x="50" y="50" z="120"/></feSpecularLighting></filter></svg>
const spot = document.querySelector('#spot');
console.log(spot.z.baseVal);
console.log(spot.z.animVal);
Lichtquelle per Schieberegler anheben
const spot = document.querySelector('#spot');
const regler = document.querySelector('#hoehe'); // <input type="range" min="10" max="400">
regler.addEventListener('input', () => {
// baseVal setzen aktualisiert das Attribut z sofort
spot.z.baseVal = Number(regler.value);
console.log(spot.getAttribute('z'));
});
Spotlicht komplett per Skript erzeugen
const NS = 'http://www.w3.org/2000/svg';
const lighting = document.querySelector('feDiffuseLighting');
const spot = document.createElementNS(NS, 'feSpotLight');
spot.x.baseVal = 100;
spot.y.baseVal = 80;
spot.z.baseVal = 200;
spot.pointsAtZ.baseVal = 0;
lighting.append(spot);
console.log(spot.z.baseVal, spot.getAttribute('z'));
// Wichtig · Fallstricke
spot.z = 100hat keine Wirkung (bzw. wirft im Strict Mode einenTypeError) – immerspot.z.baseValsetzen.animValist schreibgeschützt; bei laufender SMIL-Animation weicht es vonbaseValab.- Die Einheit hängt von
primitiveUnitsdes Filters ab: BeiobjectBoundingBoxistzein Bruchteil der Elementgröße – Werte wie100wirken dann völlig anders als erwartet. - Das Element muss mit
createElementNSim SVG-Namensraum erzeugt werden, sonst existiert die Eigenschaft nicht. - In allen modernen Browsern unterstützt; Licht-Filter können bei großen Flächen rechenintensiv sein und Animationen verlangsamen.