Start · Sprachen · JavaScript · Referenz · SVGTextPathElement.method

SVGTextPathElement.method

Eigenschaft

Liefert ein <code>SVGAnimatedEnumeration</code>-Objekt, das das <code>method</code>-Attribut eines <code>&lt;textPath&gt;</code>-Elements abbildet (<code>align</code> oder <code>stretch</code>).

seit JavaScript SVG 1.1 – Baseline: alle modernen Browser (Eigensc Kategorie: webapi

Signatur

SVGTextPathElement.method

Beschreibung

Die schreibgeschützte Eigenschaft method der Schnittstelle SVGTextPathElement spiegelt das SVG-Attribut method eines <textPath>-Elements wider. Das Attribut legt fest, wie die einzelnen Zeichen entlang des Pfads gesetzt werden: bei align (Standard) wird jedes Glyph unverändert gedreht und am Pfad ausgerichtet, bei stretch sollen die Glyphen verzerrt werden, damit sie der Krümmung des Pfads folgen.

Zurückgegeben wird kein String, sondern ein SVGAnimatedEnumeration-Objekt. Dessen Eigenschaft baseVal enthält den im Markup gesetzten Wert als Zahl, animVal den aktuellen Wert, gegebenenfalls unter Berücksichtigung einer laufenden SMIL-Animation. Die Zahlen entsprechen den Konstanten SVGTextPathElement.TEXTPATH_METHODTYPE_UNKNOWN (0), TEXTPATH_METHODTYPE_ALIGN (1) und TEXTPATH_METHODTYPE_STRETCH (2).

Die Eigenschaft selbst ist schreibgeschützt, baseVal kann aber gesetzt werden. Das ändert das zugrunde liegende Attribut. Alternativ funktioniert auch setAttribute("method", "stretch"). Praktisch nützlich ist method vor allem, wenn man den Zustand eines vorhandenen <textPath> auslesen oder umschalten will, ohne mit Attribut-Strings zu arbeiten.

Rückgabewert

Typ
SVGAnimatedEnumeration
Beschreibung
Objekt mit baseVal (Zahl, beschreibbar) und animVal (Zahl, schreibgeschützt). Mögliche Werte: 0 = unbekannt, 1 = align, 2 = stretch. Fehlt das Attribut, ist der Wert 1 (align).

Beispiele

Aktuelle Methode auslesen

// HTML: <svg><path id="kurve" d="M10,90 Q100,10 190,90" fill="none"/>
//   <text><textPath id="tp" href="#kurve" method="stretch">Hallo Welt</textPath></text></svg>
const textPath = document.getElementById('tp');

const namen = {
  [SVGTextPathElement.TEXTPATH_METHODTYPE_UNKNOWN]: 'unknown',
  [SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN]: 'align',
  [SVGTextPathElement.TEXTPATH_METHODTYPE_STRETCH]: 'stretch'
};

console.log(textPath.method.baseVal);
console.log(namen[textPath.method.baseVal]);
2 stretch

Methode per Skript umschalten

const svgNS = 'http://www.w3.org/2000/svg';
const svg = document.createElementNS(svgNS, 'svg');
const path = document.createElementNS(svgNS, 'path');
path.id = 'bogen';
path.setAttribute('d', 'M10,80 C40,10 160,10 190,80');
path.setAttribute('fill', 'none');

const text = document.createElementNS(svgNS, 'text');
const tp = document.createElementNS(svgNS, 'textPath');
tp.setAttribute('href', '#bogen');
tp.textContent = 'Text auf dem Bogen';
text.append(tp);
svg.append(path, text);
document.body.append(svg);

console.log(tp.method.baseVal); // Standard: align

// Über die Konstante umschalten – das Attribut wird mitgesetzt
tp.method.baseVal = SVGTextPathElement.TEXTPATH_METHODTYPE_STRETCH;
console.log(tp.getAttribute('method'));
1 stretch

Alle textPath-Elemente auf align zurücksetzen

const resetAlign = (root = document) => {
  root.querySelectorAll('textPath').forEach((tp) => {
    if (tp.method.baseVal !== SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN) {
      tp.method.baseVal = SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN;
    }
  });
};

resetAlign();
console.log([...document.querySelectorAll('textPath')].map((tp) => tp.getAttribute('method')));
["align", "align"] // je nach Anzahl der Elemente

// Wichtig · Fallstricke

  • Kein String: tp.method ist ein Objekt. Vergleiche wie tp.method === 'stretch' sind immer false. Nutze tp.method.baseVal zusammen mit den Konstanten.
  • Schreibgeschützt: Eine Zuweisung an tp.method selbst wird ignoriert (im Strict Mode gibt es einen TypeError). Schreib stattdessen in baseVal.
  • Ungültige Werte: Wenn du baseVal auf 0 (UNKNOWN) oder eine unbekannte Zahl setzt, werfen aktuelle Browser einen TypeError. Ungültige Attributwerte im Markup führen dagegen zum Wert 0 bzw. zum Standardverhalten.
  • Darstellung: Die Eigenschaft ist in allen modernen Browsern vorhanden. Die tatsächliche Verzerrung der Glyphen bei stretch setzen die gängigen Rendering-Engines aber kaum oder gar nicht um. Oft sieht das Ergebnis genauso aus wie bei align. Verlass dich für wichtige Darstellungen also nicht darauf.
  • animVal weicht nur während einer SMIL-Animation (<set>/<animate>) von baseVal ab.