Signatur
Beschreibung
Die Eigenschaft y der Schnittstelle SVGFEBlendElement entspricht dem y-Attribut eines <feBlend>-Elements. Sie gibt die vertikale Koordinate der oberen linken Ecke des Teilbereichs an, auf den das Filterprimitiv angewendet wird (Filterprimitiv-Teilbereich, engl. filter primitive subregion).
Der Rückgabewert ist ein SVGAnimatedLength-Objekt. Die Eigenschaft selbst ist schreibgeschützt, du kannst ihr also kein neues Objekt zuweisen. Den Wert änderst du aber über y.baseVal (ein SVGLength), etwa mit baseVal.value, baseVal.valueAsString oder baseVal.newValueSpecifiedUnits(). y.animVal enthält den aktuellen Wert, der sich während einer SMIL-Animation ergibt.
Ist kein y-Attribut gesetzt, gilt als Standard 0% des Filterbereichs. Wie der Wert gedeutet wird, hängt vom Attribut primitiveUnits des übergeordneten <filter>-Elements ab: Bei userSpaceOnUse (Standard) sind es Benutzerkoordinaten, bei objectBoundingBox Anteile am Begrenzungsrahmen des gefilterten Elements.
Rückgabewert
baseVal (änderbarer Basiswert als SVGLength) und animVal (schreibgeschützter, aktuell animierter Wert).Beispiele
y-Koordinate eines feBlend-Elements auslesen
// HTML:
// <svg width="200" height="200">
// <filter id="blend">
// <feBlend id="fe" in="SourceGraphic" in2="BackgroundImage" mode="multiply" y="20" />
// </filter>
// <rect width="100" height="100" fill="tomato" filter="url(#blend)" />
// </svg>
const fe = document.getElementById('fe');
console.log(fe.y instanceof SVGAnimatedLength);
console.log(fe.y.baseVal.value);
console.log(fe.y.baseVal.valueAsString);
y-Wert per Skript ändern
const fe = document.querySelector('feBlend');
// Wert in Benutzereinheiten setzen
fe.y.baseVal.value = 40;
console.log(fe.getAttribute('y'));
// Auf Prozent umstellen
fe.y.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 10);
console.log(fe.getAttribute('y'));
feBlend dynamisch erzeugen und positionieren
const svgNS = 'http://www.w3.org/2000/svg';
const filter = document.createElementNS(svgNS, 'filter');
filter.id = 'dynBlend';
const blend = document.createElementNS(svgNS, 'feBlend');
blend.setAttribute('in', 'SourceGraphic');
blend.setAttribute('mode', 'screen');
blend.y.baseVal.valueAsString = '15%';
filter.append(blend);
document.querySelector('svg').append(filter);
console.log(blend.y.baseVal.unitType === SVGLength.SVG_LENGTHTYPE_PERCENTAGE);
// Wichtig · Fallstricke
- Schreibgeschützt:
fe.y = 10hat keine Wirkung und wirft im Strict Mode einenTypeError. Ändere den Wert stattdessen überfe.y.baseValodersetAttribute('y', …). animValist nur lesbar. In Browsern ohne laufende SMIL-Animation entspricht er meistbaseVal.- Das Element muss im SVG-Namensraum erzeugt werden (
createElementNS). Mitdocument.createElement('feBlend')entsteht ein unbekanntes HTML-Element ohne die Eigenschafty. - Relative Einheiten wie
%kannbaseVal.valueerst sinnvoll in Benutzereinheiten umrechnen, wenn das Element im gerenderten Dokument hängt. Sonst kann ein Fehler auftreten oder ein unerwarteter Wert herauskommen. - Die Eingabe
BackgroundImagewird von modernen Browsern kaum unterstützt. Die Eigenschaftyselbst gibt es in allen aktuellen Browsern.