Signatur
Beschreibung
Die Eigenschaft y der Schnittstelle SVGFEImageElement spiegelt das Attribut y des SVG-Elements <feImage> wider. Sie legt die obere Kante des Filterprimitiv-Teilbereichs fest, also des Rechtecks, in das das eingebundene Bild bei der Filterberechnung gezeichnet wird.
Die Eigenschaft selbst ist nur lesbar. Sie gibt aber ein SVGAnimatedLength-Objekt zurück. Dessen Unterobjekt baseVal (ein SVGLength) lässt sich ändern. Über animVal liest du den Wert, der gerade gilt, auch während einer SMIL-Animation. So kannst du die Position eines Filterbildes per JavaScript verschieben, ohne mit Attribut-Strings zu arbeiten.
Wie der Wert zu verstehen ist, hängt vom Attribut primitiveUnits des übergeordneten <filter>-Elements ab. Bei userSpaceOnUse (Standard) ist er eine Länge im Benutzerkoordinatensystem. Bei objectBoundingBox ist er ein Anteil des Begrenzungsrahmens des gefilterten Elements (z. B. 0.25 = 25 %). Fehlt das Attribut, gilt standardmäßig 0% des Filterbereichs.
Rückgabewert
baseVal (änderbarer Grundwert als SVGLength) und animVal (nur lesbarer, gerade gültiger Wert, eventuell animiert).Beispiele
y-Wert eines feImage-Elements auslesen
// HTML: <svg><filter id="f"><feImage id="img" href="logo.png" x="10" y="20" width="100" height="50"/></filter></svg>
const feImage = document.getElementById('img');
console.log(feImage.y.baseVal.value); // Zahl in Benutzereinheiten
console.log(feImage.y.baseVal.unitType === SVGLength.SVG_LENGTHTYPE_NUMBER);
console.log(feImage.y.animVal.value);
Position des Filterbildes per Schieberegler verschieben
const feImage = document.querySelector('filter#f feImage');
const slider = document.querySelector('#yRegler'); // <input type="range" min="0" max="200">
slider.addEventListener('input', () => {
// baseVal ist änderbar, obwohl feImage.y nur lesbar ist
feImage.y.baseVal.value = Number(slider.value);
});
Wert in Prozent setzen und umrechnen
const svgNS = 'http://www.w3.org/2000/svg';
const filter = document.createElementNS(svgNS, 'filter');
const feImage = document.createElementNS(svgNS, 'feImage');
filter.appendChild(feImage);
document.querySelector('svg').appendChild(filter);
// Einheit Prozent setzen
feImage.y.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 25);
console.log(feImage.getAttribute('y'));
console.log(feImage.y.baseVal.valueAsString);
// Wichtig · Fallstricke
- Nur lesbar:
feImage.y = 50wirkt nicht. Im strikten Modus wird einTypeErrorgeworfen. Ändere stattdessenfeImage.y.baseVal.valueoder nutzesetAttribute('y', ...). - animVal ist nur lesbar: Wer auf
animValschreibt, löst eineNoModificationAllowedError-Ausnahme aus. - Einheiten: Bei
primitiveUnits="objectBoundingBox"liefertbaseVal.valueAnteile (0–1) und keine Pixel. Bei Prozentwerten hängtvaluevom Bezugsrahmen ab und kann im nicht gerenderten Zustand ungenau sein. - Kein Attribut gesetzt: Liegt kein
y-Attribut vor, liefertbaseVal0, wirksam ist aber0%des Filterbereichs. - Kompatibilität: Wird von allen modernen Browsern unterstützt (Chrome, Firefox, Safari, Edge). Da
<feImage>externe Bilder laden kann, gelten für fremde Quellen CORS- und CSP-Regeln (img-src).