Signatur
Beschreibung
Die Eigenschaft x der Schnittstelle SVGFECompositeElement gibt das Attribut x des zugehörigen <feComposite>-Elements als SVGAnimatedLength-Objekt zurück. Zusammen mit y, width und height legt sie den Filter-Primitiv-Teilbereich fest, also das Rechteck, auf das sich das Ergebnis des Compositing-Schritts beschränkt.
Die Eigenschaft selbst ist schreibgeschützt: Das Objekt kann nicht ersetzt werden. Den Wert kann man aber über x.baseVal ändern, z. B. mit baseVal.value, baseVal.valueAsString oder newValueSpecifiedUnits(). x.animVal liefert den aktuellen Wert, einschließlich laufender SMIL-Animationen, und ist nur lesbar.
Wie der Wert ausgelegt wird, hängt vom Attribut primitiveUnits des umgebenden <filter>-Elements ab. Bei userSpaceOnUse (Standard) gilt der Wert im Benutzerkoordinatensystem, bei objectBoundingBox als Anteil des Begrenzungsrahmens des gefilterten Elements. Ohne gesetztes Attribut gilt der Standardwert 0% relativ zum Filterbereich. Das Primitiv deckt dann den gesamten Filterbereich ab.
Rückgabewert
baseVal (änderbare SVGLength) und animVal (nur lesbare, aktuell animierte SVGLength) für das Attribut x.Beispiele
x-Koordinate eines feComposite auslesen
const svgNS = 'http://www.w3.org/2000/svg';
const svg = document.createElementNS(svgNS, 'svg');
svg.innerHTML = `
<filter id="f">
<feFlood flood-color="tomato" result="flut"/>
<feComposite id="comp" in="flut" in2="SourceGraphic" operator="in" x="10" y="20" width="100" height="50"/>
</filter>`;
document.body.append(svg);
const comp = svg.querySelector('#comp');
console.log(comp.x instanceof SVGAnimatedLength);
console.log(comp.x.baseVal.value);
console.log(comp.x.animVal.value);
x-Wert per baseVal ändern
const comp = document.querySelector('feComposite');
// Wert in Benutzereinheiten setzen
comp.x.baseVal.value = 40;
console.log(comp.getAttribute('x'));
// Prozentwert über die Einheiten-API setzen
comp.x.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 25);
console.log(comp.getAttribute('x'));
console.log(comp.x.baseVal.unitType === SVGLength.SVG_LENGTHTYPE_PERCENTAGE);
Teilbereich interaktiv verschieben
const comp = document.querySelector('#comp');
const slider = document.querySelector('#xRegler'); // <input type="range">
slider.addEventListener('input', () => {
// Linke Kante des Filter-Teilbereichs verschieben
comp.x.baseVal.valueAsString = `${slider.value}px`;
});
// Wichtig · Fallstricke
- Nicht direkt zuweisen:
comp.x = 10bewirkt nichts und wirft im Strict Mode einenTypeError. Ändern Sie stattdessencomp.x.baseVal.valueoder verwenden SiesetAttribute('x', …). animValist schreibgeschützt. Ein Schreibversuch löst eineNoModificationAllowedError-DOMExceptionaus.- Bei relativen Einheiten (
%,em) kannbaseVal.valueeinen umgerechneten Wert oder0liefern, wenn der Bezugskontext fehlt, z. B. wenn das Element noch nicht im Dokument ist. Für den Originalwert nehmen SievalueAsStringodervalueInSpecifiedUnits. - Wie der Wert ausgelegt wird, hängt von
primitiveUnitsam<filter>ab. BeiobjectBoundingBoxbedeutet0.1„10 % der Breite des Begrenzungsrahmens“. - SVG-Elemente müssen mit
createElementNSund dem SVG-Namensraum erzeugt werden. Sonst gibt es keinex-Eigenschaft. - Kompatibilität: Die Eigenschaft wird von allen modernen Browsern unterstützt (Chrome, Firefox, Safari, Edge).