Signatur
Beschreibung
Die Eigenschaft width des Interfaces SVGFEImageElement entspricht dem width-Attribut eines <feImage>-Elements. Sie legt die horizontale Ausdehnung des Filter-Primitiv-Teilbereichs (filter primitive subregion) fest, also des Rechtecks, in das das Bild innerhalb des Filters gezeichnet wird bzw. auf das die Ausgabe dieses Primitivs begrenzt ist.
Zurückgegeben wird kein einfacher Zahlenwert, sondern ein SVGAnimatedLength-Objekt. Über baseVal erreichst du den im Markup (oder per Skript) gesetzten Grundwert als SVGLength, über animVal den aktuellen, ggf. durch SMIL-Animation veränderten Wert. Die Eigenschaft selbst ist schreibgeschützt; ändern lässt sich der Wert über width.baseVal.value, width.baseVal.newValueSpecifiedUnits() oder direkt per setAttribute('width', …).
Ist das Attribut nicht gesetzt, gilt der Standardwert 100% der Filterregion. Wie Prozent- und Zahlenwerte interpretiert werden, hängt vom Attribut primitiveUnits des umgebenden <filter>-Elements ab (userSpaceOnUse oder objectBoundingBox).
Rückgabewert
SVGAnimatedLength-Objekt mit baseVal (Grundwert, veränderbar) und animVal (animierter Wert, nur lesbar), jeweils als SVGLength.Beispiele
Breite eines feImage-Primitivs auslesen
// Markup:
// <svg width="300" height="200">
// <filter id="f" primitiveUnits="userSpaceOnUse">
// <feImage id="img" href="logo.png" x="10" y="10" width="120" height="80" />
// </filter>
// <rect width="300" height="200" filter="url(#f)" />
// </svg>
const feImage = document.getElementById('img');
console.log(feImage.width instanceof SVGAnimatedLength);
console.log(feImage.width.baseVal.value);
console.log(feImage.width.animVal.value);
Breite per Skript ändern
const feImage = document.querySelector('feImage');
// Zahlenwert in Benutzereinheiten setzen
feImage.width.baseVal.value = 200;
console.log(feImage.getAttribute('width'));
// Wert mit expliziter Einheit (Prozent) setzen
feImage.width.baseVal.newValueSpecifiedUnits(
SVGLength.SVG_LENGTHTYPE_PERCENTAGE,
50
);
console.log(feImage.getAttribute('width'));
feImage dynamisch erzeugen und Breite prüfen
const SVG_NS = 'http://www.w3.org/2000/svg';
const filter = document.createElementNS(SVG_NS, 'filter');
const feImage = document.createElementNS(SVG_NS, 'feImage');
feImage.setAttribute('href', 'textur.png');
feImage.setAttribute('width', '64');
filter.append(feImage);
document.querySelector('svg defs').append(filter);
const { baseVal } = feImage.width;
console.log(baseVal.value, baseVal.unitType === SVGLength.SVG_LENGTHTYPE_NUMBER);
// Wichtig · Fallstricke
- Nicht direkt zuweisbar:
feImage.width = 100hat keine Wirkung (bzw. wirft im Strict Mode einenTypeError). Ändere stattdessenwidth.baseVal.valueoder das Attribut. - Fehlendes Attribut: Ohne
width-Attribut liefertbaseValin manchen Browsern den Wert0bzw. einen Prozentwert, obwohl effektiv100%der Filterregion gilt. Prüfe bei Bedarf mithasAttribute('width'). - Einheiten: Bei Prozentangaben liefert
baseVal.valueeinen umgerechneten Wert in Benutzereinheiten, der vom Kontext abhängt; den Rohwert erhältst du übervalueInSpecifiedUnits. - primitiveUnits beachten: Bei
primitiveUnits="objectBoundingBox"bedeutetwidth="0.5"die halbe Breite des gefilterten Elements. - Kompatibilität: In allen modernen Browsern unterstützt. Externe Bilder in
<feImage>unterliegen Same-Origin-/CORS-Regeln; Verweise auf SVG-Fragmente (href="#id") werden von Firefox nicht unterstützt.