Signatur
Beschreibung
Die Eigenschaft spreadMethod der Schnittstelle SVGGradientElement gibt das Attribut spreadMethod eines <linearGradient>- oder <radialGradient>-Elements wieder. Das Attribut legt fest, wie der Verlauf die Fläche außerhalb seines definierten Bereichs füllt, also vor dem ersten und nach dem letzten <stop>.
Zurückgegeben wird ein SVGAnimatedEnumeration-Objekt. Dessen Eigenschaft baseVal enthält den eingestellten Wert und lässt sich beschreiben. animVal ist schreibgeschützt und enthält den aktuellen Wert, gegebenenfalls nach einer SMIL-Animation. Die Werte sind Zahlen und entsprechen den Konstanten von SVGGradientElement:
SVG_SPREADMETHOD_UNKNOWN(0): unbekannter oder ungültiger WertSVG_SPREADMETHOD_PAD(1): Die Randfarben werden bis zum Rand der Fläche fortgesetzt (Standardwert).SVG_SPREADMETHOD_REFLECT(2): Der Verlauf wird abwechselnd gespiegelt wiederholt.SVG_SPREADMETHOD_REPEAT(3): Der Verlauf wird in derselben Richtung wiederholt.
Die Eigenschaft ist nützlich, wenn du das Verhalten eines Verlaufs per Skript auslesen oder ändern willst, etwa für interaktive Grafiken, Editoren oder Themes. Du kannst dem Objekt selbst nichts zuweisen. Um den Wert zu ändern, setzt du spreadMethod.baseVal oder rufst setAttribute('spreadMethod', …) auf.
Rückgabewert
baseVal (beschreibbar) und animVal (schreibgeschützt). Beide enthalten einen der Zahlenwerte 0–3, die den Konstanten SVG_SPREADMETHOD_* entsprechen.Beispiele
Aktuelle Spread-Methode auslesen
const svgNS = 'http://www.w3.org/2000/svg';
const gradient = document.createElementNS(svgNS, 'linearGradient');
gradient.setAttribute('spreadMethod', 'reflect');
const { baseVal } = gradient.spreadMethod;
console.log(baseVal);
console.log(baseVal === SVGGradientElement.SVG_SPREADMETHOD_REFLECT);
Zahlenwert in lesbaren Namen umwandeln
const namen = {
[SVGGradientElement.SVG_SPREADMETHOD_UNKNOWN]: 'unknown',
[SVGGradientElement.SVG_SPREADMETHOD_PAD]: 'pad',
[SVGGradientElement.SVG_SPREADMETHOD_REFLECT]: 'reflect',
[SVGGradientElement.SVG_SPREADMETHOD_REPEAT]: 'repeat'
};
// Ohne Attribut gilt der Standardwert "pad"
const grad = document.createElementNS('http://www.w3.org/2000/svg', 'radialGradient');
console.log(namen[grad.spreadMethod.baseVal]);
Spread-Methode per Button umschalten
// HTML: <svg><defs><linearGradient id="verlauf" x1="0" x2="0.3">
// <stop offset="0" stop-color="tomato"/><stop offset="1" stop-color="gold"/>
// </linearGradient></defs><rect width="300" height="80" fill="url(#verlauf)"/></svg>
// <button id="umschalten">Umschalten</button>
const verlauf = document.querySelector('#verlauf');
const reihenfolge = [
SVGGradientElement.SVG_SPREADMETHOD_PAD,
SVGGradientElement.SVG_SPREADMETHOD_REFLECT,
SVGGradientElement.SVG_SPREADMETHOD_REPEAT
];
document.querySelector('#umschalten').addEventListener('click', () => {
const aktuell = reihenfolge.indexOf(verlauf.spreadMethod.baseVal);
const naechster = reihenfolge[(aktuell + 1) % reihenfolge.length];
verlauf.spreadMethod.baseVal = naechster; // aktualisiert auch das Attribut
console.log(verlauf.getAttribute('spreadMethod'));
});
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
gradient.spreadMethod = 2hat keine Wirkung und wirft im Strict Mode einenTypeError. Ändere stattdessenspreadMethod.baseVal. - Zahlen statt Zeichenketten:
baseValenthält eine Zahl und nicht'pad','reflect'oder'repeat'. Für Vergleiche solltest du die KonstantenSVG_SPREADMETHOD_*verwenden. - Wird
baseValauf0(UNKNOWN) oder einen Wert außerhalb des gültigen Bereichs gesetzt, wirft der Browser einenTypeError. Ältere Browser werfen in diesem Fall einenDOMException. - Die Spread-Methode ist nur sichtbar, wenn der Verlauf die Form nicht vollständig abdeckt, etwa bei
x1/x2unter 100 % oder einem kleinenr. Andernfalls sieht jede Methode gleich aus. - Bei Verläufen, die über
hrefvon einem anderen Verlauf erben, liefertbaseValnur den Attributwert des eigenen Elements und nicht den geerbten Wert. - Die Eigenschaft wird von allen modernen Browsern unterstützt. Ältere Safari-Versionen haben
reflectundrepeatteilweise fehlerhaft dargestellt.