Signatur
Beschreibung
Die Eigenschaft pointsAtY gehört zur Schnittstelle SVGFESpotLightElement und gibt die y-Koordinate des Zielpunkts zurück, auf den der Spotlicht-Kegel eines <feSpotLight>-Elements ausgerichtet ist. Zusammen mit pointsAtX und pointsAtZ bestimmt sie die Richtung der Lichtquelle innerhalb von Beleuchtungsfiltern wie <feDiffuseLighting> oder <feSpecularLighting>.
Der Rückgabewert ist ein SVGAnimatedNumber-Objekt. Die Eigenschaft selbst ist schreibgeschützt, du kannst ihr also kein neues Objekt zuweisen. Über baseVal liest und setzt du den Grundwert des Attributs, über animVal liest du den aktuell gültigen, eventuell durch SMIL-Animation (<animate>) veränderten Wert.
Brauchbar ist das vor allem, wenn du Lichteffekte dynamisch steuern willst, zum Beispiel einen Spotlicht-Kegel, der dem Mauszeiger folgt, oder interaktive Reliefeffekte. Ist das Attribut nicht gesetzt, gilt der Standardwert 0.
Rückgabewert
baseVal (Grundwert, beschreibbar, number) und animVal (animierter Wert, nur lesbar). Beide sind 0, wenn das Attribut fehlt.Beispiele
Wert von pointsAtY auslesen
// HTML:
// <svg width="200" height="200">
// <filter id="licht">
// <feSpecularLighting specularExponent="20" lighting-color="#fff">
// <feSpotLight id="spot" x="50" y="50" z="100"
// pointsAtX="100" pointsAtY="120" pointsAtZ="0"
// limitingConeAngle="30" />
// </feSpecularLighting>
// </filter>
// <rect width="200" height="200" filter="url(#licht)" />
// </svg>
const spot = document.getElementById('spot');
console.log(spot.pointsAtY.baseVal);
console.log(spot.pointsAtY.animVal);
Spotlicht dem Mauszeiger folgen lassen
const svg = document.querySelector('svg');
const spot = document.getElementById('spot');
svg.addEventListener('pointermove', (event) => {
const rect = svg.getBoundingClientRect();
// Zielpunkt auf die Mausposition setzen
spot.pointsAtX.baseVal = event.clientX - rect.left;
spot.pointsAtY.baseVal = event.clientY - rect.top;
});
Standardwert bei fehlendem Attribut
const ns = 'http://www.w3.org/2000/svg';
const light = document.createElementNS(ns, 'feSpotLight');
console.log(light.pointsAtY.baseVal); // Attribut nicht gesetzt
light.setAttribute('pointsAtY', '42.5');
console.log(light.pointsAtY.baseVal);
console.log(light.getAttribute('pointsAtY'));
// Wichtig · Fallstricke
- Schreibschutz: Mit
spot.pointsAtY = 50änderst du nichts, im Strict Mode gibt es dabei einenTypeError. Schreib stattdessenspot.pointsAtY.baseVal = 50oder verwendesetAttribute('pointsAtY', '50'). - animVal ist nur lesbar: Wenn du
animValetwas zuweist, hat das keine Wirkung. Ohne laufende Animation stimmtanimValmitbaseValüberein. - Koordinatensystem: Welche Einheiten der Wert hat, hängt von
primitiveUnitsdes umgebenden<filter>ab. BeiobjectBoundingBoxsind es Bruchteile der Bounding-Box, also Werte zwischen 0 und 1, keine Pixel. - Groß-/Kleinschreibung: Das Attribut heißt in camelCase
pointsAtY. In HTML-eingebettetem SVG korrigiert der Parser die Schreibweise automatisch, beisetAttributein XML-Dokumenten musst du sie dagegen exakt einhalten. - Kompatibilität: Wird von allen modernen Browsern (Chrome, Firefox, Safari, Edge) seit Langem unterstützt.