Signatur
Beschreibung
Die Eigenschaft height der Schnittstelle SVGFECompositeElement gibt das height-Attribut eines <feComposite>-Elements zurück. Zusammen mit x, y und width bestimmt es den Teilbereich der Filterprimitive (filter primitive subregion). Das ist das Rechteck, in dem das Ergebnis des Compositings berechnet und abgeschnitten wird.
Zurückgegeben wird ein SVGAnimatedLength-Objekt mit zwei Teilen:
baseValist der statische Wert aus dem Attribut. Er lässt sich lesen und ändern.animValist der aktuell animierte Wert, etwa während einer SMIL-Animation. Er ist nur lesbar.
Beide Werte sind SVGLength-Objekte. Sie bieten unter anderem value (in Benutzereinheiten), valueInSpecifiedUnits, unitType und valueAsString.
Ist kein height-Attribut gesetzt, gilt als Standard 100% des Filterbereichs. Wie Prozentangaben aufgelöst werden, hängt von primitiveUnits am übergeordneten <filter> ab (userSpaceOnUse oder objectBoundingBox). Sinnvoll ist die Eigenschaft vor allem, wenn du den Wirkungsbereich eines Composite-Filters per Skript auslesen oder dynamisch anpassen willst, etwa für Reveal-Effekte oder interaktive Masken.
Rückgabewert
SVGAnimatedLength-Objekt. Über baseVal änderst du den Attributwert, animVal liefert den animierten Wert.Beispiele
Höhe einer feComposite-Primitive auslesen
// SVG-Markup:
// <svg width="200" height="200">
// <filter id="f" primitiveUnits="userSpaceOnUse">
// <feFlood flood-color="tomato" result="flood"/>
// <feComposite id="comp" in="flood" in2="SourceGraphic"
// operator="in" x="0" y="0" width="200" height="120"/>
// </filter>
// <circle cx="100" cy="100" r="80" filter="url(#f)"/>
// </svg>
const comp = document.getElementById('comp');
const { baseVal } = comp.height;
console.log(baseVal.value); // Wert in Benutzereinheiten
console.log(baseVal.valueAsString); // Originalschreibweise
console.log(baseVal.unitType === SVGLength.SVG_LENGTHTYPE_NUMBER);
Höhe dynamisch ändern (Reveal-Effekt per Slider)
const comp = document.getElementById('comp');
const slider = document.querySelector('#revealSlider'); // <input type="range" min="0" max="200">
slider.addEventListener('input', () => {
// baseVal.value ändern schreibt das height-Attribut neu
comp.height.baseVal.value = Number(slider.value);
console.log(comp.getAttribute('height'));
});
Prozentwert setzen und Einheit umrechnen
const comp = document.querySelector('feComposite');
const h = comp.height.baseVal;
// Wert explizit in Prozent setzen
h.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 50);
console.log(h.valueAsString);
// Standardwert prüfen, wenn kein Attribut gesetzt ist
const fresh = document.createElementNS('http://www.w3.org/2000/svg', 'feComposite');
console.log(fresh.hasAttribute('height'), fresh.height.baseVal.valueAsString);
// Wichtig · Fallstricke
- Nur lesbare Referenz:
comp.height = 100bewirkt nichts und wirft im Strict Mode einenTypeError. Ändere stattdessencomp.height.baseVal.valueoder nutzesetAttribute('height', …). - animVal ist schreibgeschützt: Ein Schreibzugriff auf
animVallöst eineNoModificationAllowedError-Ausnahme aus. - Prozentwerte und
value: Bei Prozentangaben hängtbaseVal.valuevom Bezugssystem ab (primitiveUnits, Viewport). In manchen Browsern kann der Wert0oder ungenau sein, solange das Element nicht gerendert im Dokument hängt. - Negative Werte oder 0: Eine Höhe von
0deaktiviert den Effekt der Primitive, ein negativer Wert ist ein Fehler. In beiden Fällen wird das Filterergebnis leer oder transparent. - Performance: Wird die Höhe häufig geändert, etwa in
requestAnimationFrame, berechnet der Browser den gesamten Filter neu. Das kann bei großen Flächen teuer werden. - Kompatibilität: Wird in allen modernen Browsern unterstützt (Chrome, Firefox, Safari, Edge). Die Eigenschaft stammt aus dem Mixin
SVGFilterPrimitiveStandardAttributesund steht identisch auf allenSVGFE*Element-Schnittstellen zur Verfügung.