Start · Sprachen · JavaScript · Referenz · SVGFEDiffuseLightingElement.kernelUnitLengthX

SVGFEDiffuseLightingElement.kernelUnitLengthX

Eigenschaft

Schreibgeschützte Eigenschaft, die die X-Komponente des <code>kernelUnitLength</code>-Attributs eines <code>&lt;feDiffuseLighting&gt;</code>-Elements als <code>SVGAnimatedNumber</code> liefert.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

SVGFEDiffuseLightingElement.kernelUnitLengthX

Beschreibung

Die Eigenschaft kernelUnitLengthX des Interfaces SVGFEDiffuseLightingElement gibt die horizontale Komponente des SVG-Attributs kernelUnitLength eines <feDiffuseLighting>-Filterprimitivs zurück. Das Attribut legt fest, wie groß eine „Zelle“ bei der Berechnung der Oberflächennormalen ist, gemessen in Einheiten des durch primitiveUnits bestimmten Koordinatensystems.

Der Rückgabewert ist ein SVGAnimatedNumber-Objekt. Über baseVal liest (und schreibt) man den im Markup festgelegten Grundwert, über animVal den aktuellen, ggf. durch SMIL-Animation veränderten Wert. Die Eigenschaft selbst ist schreibgeschützt – man kann ihr kein neues Objekt zuweisen, wohl aber baseVal ändern.

Enthält kernelUnitLength nur eine Zahl, gilt sie für X und Y gleichermaßen. Bei zwei Zahlen (z. B. kernelUnitLength="2 3") liefert kernelUnitLengthX die erste, kernelUnitLengthY die zweite. Ist das Attribut nicht gesetzt, ist baseVal in der Regel 0 – der Browser wählt dann selbst eine geeignete Auflösung.

Praktisch nutzt man die Eigenschaft, um Lichteffekte skalierungs- und geräteunabhängig zu gestalten oder um per Skript die Qualität bzw. Weichheit eines Beleuchtungsfilters dynamisch anzupassen.

Rückgabewert

Typ
SVGAnimatedNumber
Beschreibung
Objekt mit baseVal (Grundwert, beschreibbar) und animVal (aktueller animierter Wert, schreibgeschützt) für die X-Komponente von kernelUnitLength.

Beispiele

X-Komponente auslesen

// SVG-Markup:
// <svg width="200" height="200">
//   <filter id="licht">
//     <feDiffuseLighting id="diffus" kernelUnitLength="2 3" lighting-color="white">
//       <fePointLight x="50" y="50" z="40" />
//     </feDiffuseLighting>
//   </filter>
// </svg>
const diffus = document.getElementById('diffus');
console.log(diffus.kernelUnitLengthX.baseVal);
console.log(diffus.kernelUnitLengthY.baseVal);
2 3

Element per Skript erzeugen und Wert setzen

const SVG_NS = 'http://www.w3.org/2000/svg';
const filter = document.createElementNS(SVG_NS, 'filter');
const lighting = document.createElementNS(SVG_NS, 'feDiffuseLighting');
lighting.setAttribute('kernelUnitLength', '4');
filter.append(lighting);

// Eine Zahl gilt für X und Y
console.log(lighting.kernelUnitLengthX.baseVal, lighting.kernelUnitLengthY.baseVal);

// Grundwert direkt über baseVal ändern
lighting.kernelUnitLengthX.baseVal = 1.5;
console.log(lighting.getAttribute('kernelUnitLength'));
4 4 1.5 4

Filterqualität per Schieberegler steuern

const diffus = document.querySelector('feDiffuseLighting');
const regler = document.querySelector('#aufloesung'); // <input type="range" min="0.5" max="5" step="0.5">

regler.addEventListener('input', () => {
  const wert = Number(regler.value);
  diffus.kernelUnitLengthX.baseVal = wert;
  diffus.kernelUnitLengthY.baseVal = wert;
  console.log(`kernelUnitLength: ${diffus.kernelUnitLengthX.animVal}`);
});
kernelUnitLength: 2.5 (je nach Reglerstellung)

// Wichtig · Fallstricke

  • Die Eigenschaft ist schreibgeschützt: el.kernelUnitLengthX = 2 bleibt wirkungslos (bzw. wirft im Strict Mode einen TypeError). Ändern Sie stattdessen el.kernelUnitLengthX.baseVal oder das Attribut per setAttribute().
  • Ist kernelUnitLength nicht gesetzt, liefert baseVal meist 0; das bedeutet „vom Browser bestimmt“, nicht „keine Auflösung“.
  • Negative Werte oder 0 im Attribut sind laut Spezifikation ein Fehler; der Filter kann dann deaktiviert werden.
  • Sehr kleine Werte führen zu feiner, aber rechenintensiver Beleuchtung und können auf großen Flächen die Darstellung spürbar verlangsamen.
  • Die Unterstützung des Attributs in der Render-Pipeline schwankt zwischen den Browsern (insbesondere Chromium ignoriert kernelUnitLength teils beim Rendern), obwohl die DOM-Eigenschaft überall vorhanden ist. Ergebnis daher visuell prüfen.