Start · Sprachen · JavaScript · Referenz · SVGRadialGradientElement

SVGRadialGradientElement

Schnittstelle

Stellt das SVG-Element <code>&lt;radialGradient&gt;</code> im DOM dar und macht Mittelpunkt, Radius und Brennpunkt des radialen Verlaufs per Skript zugänglich.

seit JavaScript Baseline: alle Browser (fr: SVG 2, in modernen Bro Kategorie: webapi

Signatur

interface SVGRadialGradientElement extends SVGGradientElement

Beschreibung

SVGRadialGradientElement ist die DOM-Schnittstelle für das Element <radialGradient>. Ein radialer Verlauf breitet sich kreisförmig von einem Brennpunkt (fx, fy, fr) zu einem Endkreis (cx, cy, r) aus. Die Farbstufen legen die <stop>-Kindelemente fest. Den Verlauf bindest du über fill="url(#id)" oder stroke="url(#id)" an Formen.

Die Schnittstelle erbt von SVGGradientElement und bekommt darüber gradientUnits, gradientTransform, spreadMethod und href. Selbst ergänzt sie die geometrischen Eigenschaften cx, cy, r, fx, fy und fr. Alle sind schreibgeschützte Objekte vom Typ SVGAnimatedLength. Den eigentlichen Wert liest und setzt du über .baseVal. Den gerade animierten Wert (etwa durch SMIL) liefert .animVal.

Einsatzfälle sind zum Beispiel Lichteffekte und Glanzpunkte, die der Maus folgen, Spotlights, Kugeln mit 3D-Anmutung und dynamisch erzeugte Diagramme. Neue Instanzen erzeugst du immer mit document.createElementNS("http://www.w3.org/2000/svg", "radialGradient"). Einen öffentlichen Konstruktor gibt es nicht.

Parameter

Name Typ Default Beschreibung
$cx SVGAnimatedLength 50% Eigenschaft (schreibgeschützt): x-Koordinate des Endkreis-Mittelpunkts, entspricht dem Attribut cx.
$cy SVGAnimatedLength 50% Eigenschaft (schreibgeschützt): y-Koordinate des Endkreis-Mittelpunkts, entspricht dem Attribut cy.
$r SVGAnimatedLength 50% Eigenschaft (schreibgeschützt): Radius des Endkreises. Bei 0 wird die Fläche in der Farbe des letzten Stopps gefüllt.
$fx SVGAnimatedLength Wert von cx Eigenschaft (schreibgeschützt): x-Koordinate des Brennpunkts, an dem der Verlauf beginnt.
$fy SVGAnimatedLength Wert von cy Eigenschaft (schreibgeschützt): y-Koordinate des Brennpunkts.
$fr SVGAnimatedLength 0% Eigenschaft (schreibgeschützt, SVG 2): Radius des Brennkreises.

Rückgabewert

Typ
SVGRadialGradientElement
Beschreibung
Die Instanz, die du per createElementNS(), querySelector() oder getElementById() erhältst. Ihre Geometrie-Eigenschaften liefern jeweils ein SVGAnimatedLength.

Beispiele

Radialen Verlauf per Skript erzeugen

const SVG_NS = "http://www.w3.org/2000/svg";
const svg = document.createElementNS(SVG_NS, "svg");
svg.setAttribute("width", "200");
svg.setAttribute("height", "200");

const defs = document.createElementNS(SVG_NS, "defs");
const grad = document.createElementNS(SVG_NS, "radialGradient");
grad.id = "kugel";
grad.setAttribute("cx", "50%");
grad.setAttribute("cy", "50%");
grad.setAttribute("r", "50%");
grad.setAttribute("fx", "30%");
grad.setAttribute("fy", "30%");

[["0%", "#ffffff"], ["100%", "#1e40af"]].forEach(([offset, color]) => {
  const stop = document.createElementNS(SVG_NS, "stop");
  stop.setAttribute("offset", offset);
  stop.setAttribute("stop-color", color);
  grad.append(stop);
});

defs.append(grad);
const circle = document.createElementNS(SVG_NS, "circle");
circle.setAttribute("cx", "100");
circle.setAttribute("cy", "100");
circle.setAttribute("r", "90");
circle.setAttribute("fill", "url(#kugel)");

svg.append(defs, circle);
document.body.append(svg);

console.log(grad instanceof SVGRadialGradientElement);
true

Geometrie über baseVal auslesen

// <radialGradient id="kugel" cx="50%" r="40%" fx="30%"> im Dokument
const grad = document.getElementById("kugel");

const { cx, r, fx } = grad;
console.log(cx.baseVal.valueAsString);
console.log(r.baseVal.valueInSpecifiedUnits);
console.log(r.baseVal.unitType === SVGLength.SVG_LENGTHTYPE_PERCENTAGE);
console.log(fx.baseVal.valueAsString);
50% 40 true 30%

Glanzpunkt folgt der Maus

const svg = document.querySelector("svg");
const grad = document.getElementById("kugel");

svg.addEventListener("pointermove", (event) => {
  const rect = svg.getBoundingClientRect();
  const x = ((event.clientX - rect.left) / rect.width) * 100;
  const y = ((event.clientY - rect.top) / rect.height) * 100;

  // Prozentwerte, da gradientUnits="objectBoundingBox" (Standard)
  grad.fx.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, x);
  grad.fy.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, y);
});

Spotlight in Nutzerkoordinaten mit gradientUnits

const grad = document.getElementById("spot");
grad.setAttribute("gradientUnits", "userSpaceOnUse");

// Jetzt sind Werte absolute Nutzerkoordinaten
grad.cx.baseVal.value = 120;
grad.cy.baseVal.value = 80;
grad.r.baseVal.value = 60;

console.log(grad.gradientUnits.baseVal === SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE);
console.log(grad.getAttribute("r"));
true 60