Signatur
Beschreibung
Die Eigenschaft y des Interface SVGFESpecularLightingElement gibt das y-Attribut des Elements <feSpecularLighting> zurück. Sie gehört zu den Filterprimitiv-Attributen (x, y, width, height). Diese Attribute legen den Teilbereich (filter primitive subregion) fest, in dem das Ergebnis der Glanzlicht-Berechnung erzeugt und abgeschnitten wird.
Der Rückgabewert ist ein SVGAnimatedLength-Objekt mit zwei Eigenschaften: baseVal ist der statische, im Markup oder per Skript gesetzte Wert. animVal ist der aktuelle, gegebenenfalls durch SMIL-Animation veränderte Wert und kann nur gelesen werden. Beide sind SVGLength-Objekte, deren value (in Benutzereinheiten), valueInSpecifiedUnits und unitType du auswerten kannst.
Die Eigenschaft selbst ist schreibgeschützt: Du kannst ihr kein neues Objekt zuweisen. Den Wert änderst du über y.baseVal.value, y.baseVal.newValueSpecifiedUnits() oder direkt mit setAttribute('y', …). Fehlt das Attribut, gilt standardmäßig 0% des Filterbereichs. Wie der Wert gedeutet wird, hängt vom Attribut primitiveUnits des übergeordneten <filter> ab (userSpaceOnUse oder objectBoundingBox).
Rückgabewert
baseVal und animVal (jeweils vom Typ SVGLength), das die vertikale Koordinate des Filterprimitiv-Teilbereichs beschreibt.Beispiele
y-Wert eines vorhandenen feSpecularLighting auslesen
// Markup:
// <svg width="200" height="200">
// <filter id="glanz">
// <feSpecularLighting id="spec" x="0" y="20" width="200" height="160"
// specularExponent="20" lighting-color="#fff">
// <fePointLight x="50" y="50" z="100" />
// </feSpecularLighting>
// </filter>
// </svg>
const spec = document.getElementById('spec');
console.log(spec.y instanceof SVGAnimatedLength);
console.log(spec.y.baseVal.value);
console.log(spec.y.animVal.value);
Position per Skript ändern
const spec = document.querySelector('feSpecularLighting');
// Wert in Benutzereinheiten setzen
spec.y.baseVal.value = 40;
console.log(spec.getAttribute('y'));
// Wert in Prozent setzen
spec.y.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 10);
console.log(spec.getAttribute('y'));
Element dynamisch erzeugen und y prüfen
const SVG_NS = 'http://www.w3.org/2000/svg';
const filter = document.createElementNS(SVG_NS, 'filter');
const spec = document.createElementNS(SVG_NS, 'feSpecularLighting');
filter.append(spec);
// Ohne Attribut: Standardwert 0 %
console.log(spec.y.baseVal.unitType === SVGLength.SVG_LENGTHTYPE_PERCENTAGE);
console.log(spec.y.baseVal.valueInSpecifiedUnits);
spec.setAttribute('y', '15');
console.log(spec.y.baseVal.value);
// Wichtig · Fallstricke
- Schreibgeschützt:
spec.y = …ist wirkungslos und löst im Strict Mode einenTypeErroraus. Ändere stattdessenspec.y.baseVal. animValist immer schreibgeschützt. Ein Schreibversuch löst einenNoModificationAllowedErroraus.- Nicht verwechseln mit dem
y-Attribut der Lichtquelle (<fePointLight>,<feSpotLight>). Das ist einSVGAnimatedNumberund gibt die Position des Lichts an, nicht den Filter-Teilbereich. - Prozentwerte und
primitiveUnits=\"objectBoundingBox\"beziehen sich auf den Filterbereich bzw. die Bounding Box.baseVal.valuekann deshalb bei nicht gerendertem Element oder bei relativen Einheiten unerwartete Werte liefern. - Wird von allen modernen Browsern unterstützt. Einige ältere Browser brauchten beim Filter-Neurendern nach Änderungen an Teilbereichen zusätzliche Aufmerksamkeit.