Signatur
Beschreibung
Die schreibgeschützte Eigenschaft y der Schnittstelle SVGFilterElement gibt das Attribut y eines <filter>-Elements als SVGAnimatedLength zurück. Der Wert legt die vertikale Position der oberen linken Ecke des Filterbereichs fest. Das ist die Fläche, auf die der Filter mit allen Filterprimitiven (z. B. <feGaussianBlur>) angewendet wird. Außerhalb dieses Bereichs schneidet der Browser das Ergebnis ab.
Wie der Wert gedeutet wird, hängt von filterUnits ab. Beim Standardwert objectBoundingBox ist y ein Bruchteil bzw. Prozentwert der Bounding-Box des gefilterten Elements. Bei userSpaceOnUse ist er eine Koordinate im Benutzerkoordinatensystem. Fehlt das Attribut, gilt -10%. So bleibt Platz für Effekte, die über das Element hinausgehen, etwa Schatten oder Weichzeichner.
Die Eigenschaft selbst kann man nicht neu zuweisen. Das enthaltene SVGLength-Objekt unter y.baseVal ist aber veränderbar. Änderungen daran schreiben sich direkt in das Attribut y zurück. y.animVal enthält den aktuell wirksamen, eventuell per SMIL animierten Wert und kann nur gelesen werden.
Rückgabewert
baseVal (veränderbares SVGLength, entspricht dem Attribut) und animVal (schreibgeschützter, aktuell animierter Wert).Beispiele
Filterbereich auslesen
// <svg><defs><filter id="schatten" x="0" y="-20%" width="100%" height="140%">…</filter></defs></svg>
const filter = document.querySelector('#schatten');
const y = filter.y.baseVal;
console.log(y.valueAsString);
console.log(y.unitType === SVGLength.SVG_LENGTHTYPE_PERCENTAGE);
console.log(y.valueInSpecifiedUnits);
Filterbereich für großen Weichzeichner nach oben erweitern
const filter = document.querySelector('#schatten');
// Mehr Platz nach oben, damit der Blur nicht abgeschnitten wird
filter.y.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, -50);
filter.height.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 200);
console.log(filter.getAttribute('y'));
Filter mit userSpaceOnUse dynamisch erzeugen
const SVG_NS = 'http://www.w3.org/2000/svg';
const svg = document.querySelector('svg');
const defs = svg.querySelector('defs') ?? svg.appendChild(document.createElementNS(SVG_NS, 'defs'));
const filter = document.createElementNS(SVG_NS, 'filter');
filter.id = 'blur-fix';
filter.setAttribute('filterUnits', 'userSpaceOnUse');
// Oberkante des Filterbereichs in Benutzereinheiten
filter.y.baseVal.value = 10;
const blur = document.createElementNS(SVG_NS, 'feGaussianBlur');
blur.setAttribute('stdDeviation', '4');
filter.append(blur);
defs.append(filter);
console.log(filter.getAttribute('y'), filter.y.animVal.value);
// Wichtig · Fallstricke
- Nicht direkt zuweisen:
filter.y = 20bewirkt nichts und wirft im Strict Mode einenTypeError. Ändern Sie stattdessenfilter.y.baseVal(value,valueAsString,newValueSpecifiedUnits()) oder rufen SiesetAttribute('y', …)auf. - Gemeint ist der Filterbereich:
ygehört zum<filter>-Element als Ganzes. Die Position einzelner Primitive steht inSVGFE*Element.y, etwa beiSVGFEGaussianBlurElement. - Einheiten: Bei
filterUnits=\"objectBoundingBox\"gibtbaseVal.valuekeine Pixelposition zurück. Werten Sie dafürunitTypeundvalueInSpecifiedUnitsaus. - Abgeschnittene Effekte: Wenn Schatten oder Blur oben abgeschnitten wird, ist der Standardwert
-10%oft zu klein. Erhöhen Sie dann auchheight. - Die Eigenschaft wird von allen modernen Browsern unterstützt.