Start · Sprachen · JavaScript · Referenz · SVGFEComponentTransferElement.height

SVGFEComponentTransferElement.height

Eigenschaft

Liefert als schreibgeschütztes <code>SVGAnimatedLength</code> die Höhe des Teilbereichs, den die Filterprimitive <code>&lt;feComponentTransfer&gt;</code> bearbeitet.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

SVGFEComponentTransferElement.height

Beschreibung

Die Eigenschaft height gehört zur Schnittstelle SVGFEComponentTransferElement und entspricht dem Attribut height des Elements <feComponentTransfer>. Zusammen mit x, y und width legt sie den Filterprimitiv-Teilbereich fest. Das ist das Rechteck, in dem die Primitive ihr Ergebnis berechnet und ausgibt.

Die Eigenschaft selbst ist schreibgeschützt: Sie lässt sich nicht durch ein anderes Objekt ersetzen. Sie liefert aber ein SVGAnimatedLength-Objekt mit zwei Teilen: baseVal ist der statische Grundwert und lässt sich ändern. animVal ist der aktuelle, eventuell animierte Wert und kann nur gelesen werden. Beide sind SVGLength-Objekte, zum Beispiel mit value, valueInSpecifiedUnits, unitType und convertToSpecifiedUnits().

Fehlt das Attribut, gilt standardmäßig 100% der Höhe des Filterbereichs. Wie Prozentwerte und Zahlen ausgelegt werden, hängt vom Attribut primitiveUnits des umgebenden <filter>-Elements ab: userSpaceOnUse (Standard) oder objectBoundingBox.

Man braucht die Eigenschaft vor allem, um Filter per Skript auszulesen oder dynamisch anzupassen. Ein Beispiel ist ein Farbkorrektur-Effekt, der nur auf einen Teil der Grafik wirken soll.

Rückgabewert

Typ
SVGAnimatedLength
Beschreibung
Ein Objekt mit baseVal (änderbare SVGLength) und animVal (schreibgeschützte, aktuell animierte SVGLength) für die Höhe des Filterprimitiv-Teilbereichs.

Beispiele

Höhe einer feComponentTransfer-Primitive auslesen

// HTML: <svg><filter id="f"><feComponentTransfer id="ct" height="120"><feFuncR type="linear" slope="1.5"/></feComponentTransfer></filter></svg>
const ct = document.getElementById('ct');
const { baseVal, animVal } = ct.height;
console.log(baseVal.value);    // Grundwert in Benutzereinheiten
console.log(animVal.value);    // aktueller (ggf. animierter) Wert
console.log(baseVal.unitType === SVGLength.SVG_LENGTHTYPE_NUMBER);
120 120 true

Höhe dynamisch per baseVal ändern

const svgNS = 'http://www.w3.org/2000/svg';
const filter = document.createElementNS(svgNS, 'filter');
filter.id = 'helligkeit';
const ct = document.createElementNS(svgNS, 'feComponentTransfer');
const funcG = document.createElementNS(svgNS, 'feFuncG');
funcG.setAttribute('type', 'gamma');
funcG.setAttribute('exponent', '0.5');
ct.append(funcG);
filter.append(ct);
document.querySelector('svg defs').append(filter);

// Effekt nur auf die oberen 50 Benutzereinheiten beschränken
ct.height.baseVal.value = 50;
console.log(ct.getAttribute('height'));
50

Prozentwert setzen und Einheit prüfen

const ct = document.querySelector('feComponentTransfer');
// Höhe auf 50 % des Filterbereichs setzen
ct.height.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 50);
console.log(ct.getAttribute('height'));
console.log(ct.height.baseVal.valueInSpecifiedUnits);
50% 50

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie ct.height = 100 bleibt ohne Wirkung (im Strict Mode wirft sie einen TypeError). Ändern Sie stattdessen ct.height.baseVal.value oder das Attribut per setAttribute('height', …).
  • animVal ist immer schreibgeschützt. Schreibversuche lösen eine NoModificationAllowedError-Ausnahme aus.
  • Bei Prozentwerten kann das Lesen von baseVal.value ein unerwartetes Ergebnis liefern, weil sich der Bezugsrahmen aus dem Filterbereich und primitiveUnits ergibt. Mit valueInSpecifiedUnits und unitType lesen Sie den tatsächlich angegebenen Wert aus.
  • Ein Wert von 0 oder ein negativer Wert schaltet den Effekt der Primitive ab: Das Ergebnis ist dann ein leeres, transparentes Bild.
  • SVG-Elemente müssen mit document.createElementNS() und dem SVG-Namensraum erzeugt werden, sonst gibt es die Eigenschaft nicht.
  • Kompatibilität: Alle modernen Browser unterstützen die Eigenschaft seit Langem (Chrome, Firefox, Safari, Edge).