Start · Sprachen · JavaScript · Referenz · SVGFEConvolveMatrixElement.targetX

SVGFEConvolveMatrixElement.targetX

Eigenschaft

Gibt ein <code>SVGAnimatedInteger</code> zurück, das das Attribut <code>targetX</code> eines <code>&lt;feConvolveMatrix&gt;</code>-Elements widerspiegelt.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

SVGFEConvolveMatrixElement.targetX

Beschreibung

Die schreibgeschützte Eigenschaft targetX der Schnittstelle SVGFEConvolveMatrixElement spiegelt das SVG-Attribut targetX des Filter-Primitivs <feConvolveMatrix> wider. Das Attribut legt die Spalte der Faltungsmatrix (Kernel) fest, die über dem aktuell berechneten Pixel liegt. Zusammen mit targetY bestimmt es also den Ankerpunkt des Kernels.

Der Wert ist eine ganze Zahl zwischen 0 und orderX - 1. Ist das Attribut nicht angegeben, verwendet der Renderer beim Zeichnen die Mitte der Matrix, also Math.floor(orderX / 2). Wenn du targetX aus der Mitte verschiebst, wird das Ergebnis des Filters versetzt. Das ist zum Beispiel nützlich bei gerichteten Effekten wie Prägung (Emboss) oder Bewegungsunschärfe.

Die Eigenschaft selbst ist schreibgeschützt. Du bekommst jedoch ein SVGAnimatedInteger-Objekt zurück. Über dessen Eigenschaft baseVal kannst du den Wert lesen und setzen. animVal liefert den aktuell animierten Wert und ist nur lesbar.

Rückgabewert

Typ
SVGAnimatedInteger
Beschreibung
Ein Objekt mit baseVal (lesbar und schreibbar, ganze Zahl) und animVal (nur lesbar, animierter Wert). Beide geben die Spaltenposition des Kernel-Ankerpunkts an.

Beispiele

targetX eines vorhandenen Filters auslesen

// HTML:
// <svg width="0" height="0">
//   <filter id="emboss">
//     <feConvolveMatrix id="conv" order="3" targetX="0" targetY="0"
//       kernelMatrix="-2 -1 0  -1 1 1  0 1 2" />
//   </filter>
// </svg>

const conv = document.getElementById('conv');
console.log(conv.targetX instanceof SVGAnimatedInteger);
console.log(conv.targetX.baseVal);
console.log(conv.targetX.animVal);
true 0 0

Ankerpunkt zur Laufzeit per Schieberegler verschieben

// <input type="range" id="slider" min="0" max="2" value="1">
const conv = document.getElementById('conv');
const slider = document.getElementById('slider');
const orderX = conv.orderX.baseVal;

slider.addEventListener('input', () => {
  // Wert auf den gültigen Bereich 0 … orderX - 1 begrenzen
  const value = Math.min(Math.max(Number(slider.value), 0), orderX - 1);
  conv.targetX.baseVal = value;
  console.log(conv.getAttribute('targetX'));
});
z. B. "2" nach dem Verschieben des Reglers ans Ende

Filter dynamisch erzeugen und targetX setzen

const SVG_NS = 'http://www.w3.org/2000/svg';
const svg = document.createElementNS(SVG_NS, 'svg');
const filter = document.createElementNS(SVG_NS, 'filter');
filter.id = 'motion';

const conv = document.createElementNS(SVG_NS, 'feConvolveMatrix');
conv.setAttribute('order', '5 1');
conv.setAttribute('kernelMatrix', '1 1 1 1 1');
conv.setAttribute('divisor', '5');
// Anker ganz links → Unschärfe nur nach rechts
conv.targetX.baseVal = 0;

filter.append(conv);
svg.append(filter);
document.body.append(svg);

console.log(conv.orderX.baseVal, conv.targetX.baseVal);
5 0

// Wichtig · Fallstricke

  • Nur lesbar heißt nicht unveränderlich: conv.targetX = 1 hat keine Wirkung (im Strict Mode wirft es einen TypeError). Setze den Wert stattdessen über conv.targetX.baseVal = 1 oder setAttribute('targetX', '1').
  • Gültiger Bereich: Erlaubt ist 0 ≤ targetX < orderX. Liegt der Wert außerhalb, ist das ein Fehler: Das Filter-Primitiv wird dann je nach Browser nicht oder fehlerhaft gezeichnet. Prüfe den Wert daher gegen orderX.baseVal.
  • Fehlendes Attribut: Beim Zeichnen gilt dann Math.floor(orderX / 2). Der Wert, den baseVal in diesem Fall zurückgibt, kann sich aber je nach Browser davon unterscheiden. Setze das Attribut ausdrücklich, wenn du dich auf den Wert verlassen willst.
  • Nicht ganzzahlige Attributwerte (z. B. \"1.5\") sind ungültig.
  • Browser-Kompatibilität: Die Eigenschaft wird seit Langem von allen gängigen Browsern (Chrome, Firefox, Safari, Edge) unterstützt.