Signatur
Beschreibung
Die Eigenschaft x des Interfaces SVGMaskElement gibt die x-Koordinate der linken oberen Ecke des Maskenbereichs zurück, also des Rechtecks, außerhalb dessen die Maske nichts durchlässt. Der Wert entspricht dem Attribut x des <mask>-Elements.
Die Eigenschaft selbst ist schreibgeschützt: Sie liefert immer dasselbe SVGAnimatedLength-Objekt. Über dessen baseVal (ein SVGLength) kann der Wert aber gelesen und geändert werden. animVal enthält den aktuellen, ggf. durch SMIL-Animation veränderten Wert, und lässt sich nur lesen.
Wie der Wert zu verstehen ist, hängt von maskUnits ab: Beim Standard objectBoundingBox ist x ein Bruchteil bzw. Prozentsatz der Bounding-Box des maskierten Elements (Standardwert -10%). Bei userSpaceOnUse ist es eine Koordinate im Nutzerkoordinatensystem.
Typische Einsatzfälle sind das dynamische Verschieben oder Vergrößern eines Maskenbereichs per Skript, zum Beispiel für Einblend-Effekte oder interaktive Hervorhebungen.
Rückgabewert
baseVal (änderbares SVGLength) und animVal (schreibgeschützter, animierter Wert) für das x-Attribut der Maske.Beispiele
x-Wert einer Maske auslesen
// <svg><defs><mask id="m" x="10" y="10" width="80" height="80" maskUnits="userSpaceOnUse">...</mask></defs></svg>
const mask = document.getElementById('m');
const { baseVal } = mask.x;
console.log(baseVal.value); // Zahlenwert in Nutzereinheiten
console.log(baseVal.valueAsString); // Attribut-Schreibweise
console.log(baseVal.unitType === SVGLength.SVG_LENGTHTYPE_NUMBER);
Standardwert bei objectBoundingBox
const svgNS = 'http://www.w3.org/2000/svg';
const mask = document.createElementNS(svgNS, 'mask');
// Kein x-Attribut gesetzt, daher gilt der Standardwert -10 %
console.log(mask.x.baseVal.valueAsString);
console.log(mask.x.baseVal.unitType === SVGLength.SVG_LENGTHTYPE_PERCENTAGE);
Maskenbereich per Slider verschieben
const mask = document.querySelector('#spotlight-mask');
const slider = document.querySelector('#pos');
slider.addEventListener('input', () => {
// baseVal ist beschreibbar, das Attribut wird automatisch aktualisiert
mask.x.baseVal.value = Number(slider.value);
console.log(mask.getAttribute('x'));
});
Wert mit Einheit setzen
const mask = document.querySelector('mask');
// Setzt x auf 25 % – newValueSpecifiedUnits erlaubt eine explizite Einheit
mask.x.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 25);
console.log(mask.getAttribute('x'));
// Wichtig · Fallstricke
- Nicht direkt zuweisen:
mask.x = 20hat keine Wirkung, ändern Sie stattdessenmask.x.baseVal.valueoder nutzen SiesetAttribute('x', …). - Einheiten beachten: Bei Prozentwerten kann das Lesen von
baseVal.value(also in Nutzereinheiten umgerechnet) je nach Browser0liefern oder eine Exception auslösen, wenn kein Bezugs-Viewport ermittelt werden kann. Sicherer sindvalueInSpecifiedUnitsbzw.valueAsString. - Die Bedeutung des Werts hängt von
maskUnitsab. Nicht zu verwechseln mitmaskContentUnits, das nur das Koordinatensystem des Masken-Inhalts festlegt. animValist schreibgeschützt. Ein Schreibversuch löst einenNoModificationAllowedErroraus.- Wird die Maske mit
document.createElement('mask')statt mitcreateElementNSerzeugt, entsteht keinSVGMaskElement, undxist dannundefined. - Die Eigenschaft wird von allen modernen Browsern unterstützt.