Signatur
Beschreibung
Die schreibgeschützte Eigenschaft x der Schnittstelle SVGFEOffsetElement steht für das SVG-Attribut x des Elements <feOffset>. Zusammen mit y, width und height legt es den Teilbereich des Filterprimitivs fest, also das Rechteck, auf das das Ergebnis des Primitivs beschränkt wird.
Der Wert ist ein SVGAnimatedLength-Objekt. Über baseVal kommt man an den im Attribut gesetzten Grundwert, der sich auch ändern lässt. animVal enthält den aktuellen, möglicherweise durch SMIL-Animation veränderten Wert und kann nur gelesen werden. Beide sind SVGLength-Objekte mit Eigenschaften wie value, valueInSpecifiedUnits und unitType.
Wichtig: x ist nicht der Versatz des Offset-Effekts. Um wie viel der Inhalt verschoben wird, bestimmen dx und dy (SVGFEOffsetElement.dx bzw. .dy). x gibt nur an, wo der Ausschnitt beginnt, in dem das Primitiv sein Ergebnis zeichnet. Ohne gesetztes Attribut entspricht der Standardwert 0% dem linken Rand des Filterbereichs.
Rückgabewert
SVGAnimatedLength-Objekt. baseVal enthält den Grundwert des Attributs x und ist veränderbar, animVal den aktuell animierten Wert (nur lesbar).Beispiele
x-Koordinate eines feOffset-Primitivs auslesen
const svgNS = 'http://www.w3.org/2000/svg';
const filter = document.createElementNS(svgNS, 'filter');
const offset = document.createElementNS(svgNS, 'feOffset');
offset.setAttribute('x', '10');
offset.setAttribute('dx', '5');
filter.appendChild(offset);
console.log(offset.x instanceof SVGAnimatedLength);
console.log(offset.x.baseVal.value);
console.log(offset.dx.baseVal); // dx ist ein SVGAnimatedNumber
Teilbereich per Skript verändern
// Annahme: <filter id="schatten"><feOffset id="off" dx="4" dy="4"/></filter>
const off = document.getElementById('off');
// Grundwert setzen – das Attribut wird automatisch angepasst
off.x.baseVal.value = 20;
console.log(off.getAttribute('x'));
// Mit Einheit setzen, hier Prozent
off.x.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 25);
console.log(off.getAttribute('x'));
Einheit und Standardwert prüfen
const off = document.createElementNS('http://www.w3.org/2000/svg', 'feOffset');
// Kein x-Attribut gesetzt → Standardwert 0%
const len = off.x.baseVal;
console.log(len.unitType === SVGLength.SVG_LENGTHTYPE_PERCENTAGE);
console.log(len.valueInSpecifiedUnits);
// Wichtig · Fallstricke
- x ist nicht dx: Wer den Inhalt verschieben will, muss
dxbzw.dysetzen.xändert nur, wo der Ausschnitt beginnt, in dem das Ergebnis erscheint. Liegt er ungünstig, wird die Ausgabe abgeschnitten. - Die Eigenschaft selbst ist schreibgeschützt. Eine Zuweisung wie
el.x = 10hat keine Wirkung. Werte ändert man überel.x.baseVal.valueodersetAttribute('x', …). - Wie
xgedeutet wird, hängt vonprimitiveUnitsam übergeordneten<filter>ab. BeiobjectBoundingBoxgelten Werte als Anteile des Begrenzungsrahmens, zum Beispiel0.1. - Bei Prozentwerten braucht
baseVal.valueeinen Darstellungskontext. Ist das Element noch nicht ins Dokument eingehängt, kann der berechnete Wert0sein oder beim Umrechnen einen Fehler auslösen. - SVG-Elemente immer mit
createElementNSund dem SVG-Namensraum erzeugen, sonst gibt es keinex-Eigenschaft. - Die Eigenschaft wird von allen modernen Browsern unterstützt.