Radar
Netzdiagramm, um mehrere Kennzahlen eines Datensatzes auf einer zweidimensionalen Canvas zu vergleichen.
Nimm es, wenn du ein Netz- oder Spinnendiagramm brauchst, um mehrere Kennzahlen eines Datensatzes zu vergleichen. Gib
<r-radar>über das Attributabilitysein JSON-Array aus Achsennamen und Werten.
Schnellstart
Grundlegende Verwendung
Die Daten kommen als JSON-Zeichenkette (ein Array von Objekten) über das Attribut abilitys. Da HTML-Attribute nur Zeichenketten halten können, muss der Wert gültiges JSON sein; intern wird er mit JSON.parse gelesen. Der Host <r-radar> hat keine eigene Größe — gib ihm also eine ausdrückliche Breite und Höhe.
<r-radar
style="width:300px;height:300px;display:block;"
abilitys='[{"abilityName":"Leben","scoreRate":"10"},{"abilityName":"Angriff","scoreRate":"90"},{"abilityName":"Verteidigung","scoreRate":"20"},{"abilityName":"Elementarkunde","scoreRate":"50"},{"abilityName":"Krit-Chance","scoreRate":"80"},{"abilityName":"Krit-Schaden","scoreRate":"50"}]'
></r-radar>Du kannst die Daten auch imperativ über die JS-Eigenschaft abilitys setzen; sie nimmt ein Array (das als Zeichenkette zurück ans Attribut geschrieben wird) oder eine JSON-Zeichenkette:
const radar = document.createElement('r-radar');
radar.abilitys = [
{ abilityName: 'Leben', scoreRate: 10 },
{ abilityName: 'Angriff', scoreRate: 90 },
{ abilityName: 'Verteidigung', scoreRate: 20 },
];
chart.append(radar);API-Referenz
Eigenschaften
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
abilitys | string / Array | '' | Diagrammdaten als JSON-Zeichenkette (oder Array über die JS-Eigenschaft) |
colorPolygon | string | var(--ran-radar-polygon-color) / #e6e6e6 | Farbe der konzentrischen Gitterpolygone |
colorLine | string | var(--ran-radar-line-color) / #e6e6e6 | Farbe der Achsenlinien und der Außenkante |
fillColor | string | rgba(255,121,35,0.60) | Füllfarbe der Datenfläche |
strokeColor | string | rgba(255,121,35,0.60) | Farbe der Umrisslinie und der Eckpunkte |
sheet | string | '' | CSS, das in das Shadow DOM der Komponente injiziert wird |
Jeder Eintrag des abilitys-Arrays nimmt diese Schlüssel an:
| Schlüssel | Typ | Pflicht | Beschreibung |
|---|---|---|---|
abilityName | string | Ja | Beschriftung der Achse |
scoreRate | number | Ja | Wert auf dieser Achse; das Gitter endet bei 100 |
backgroundColor | string | Nein | Hintergrundfarbe der Beschriftung (standardmäßig transparent) |
fontSize | number | Nein | Schriftgröße der Beschriftung (standardmäßig ans Diagramm skaliert) |
fontColor | string | Nein | Textfarbe der Beschriftung (standardmäßig --ran-color-text) |
fontFamily | string | Nein | Schriftfamilie der Beschriftung (standardmäßig SimHei) |
Hinweis:
colorPolygon,colorLine,fillColorundstrokeColorwerden ohne Rücksicht auf Groß- und Kleinschreibung gelesen, sie zeichnen also richtig, ob das Attribut von Anfang an da ist oder erst nach dem Mounten geändert wird; jede Änderung zeichnet das Diagramm neu. Für themebewusstes Styling nimm lieber die CSS-Variablen weiter unten.
Diagrammdaten abilitys
Das Aussehen einzelner Beschriftungen (backgroundColor, fontSize, fontColor) lässt sich pro Eintrag setzen:
<r-radar
style="width:300px;height:300px;display:block;"
abilitys='[{"abilityName":"Leben","scoreRate":"10","backgroundColor":"red","fontSize":"30","fontColor":"blue"},{"abilityName":"Angriff","scoreRate":"90"},{"abilityName":"Verteidigung","scoreRate":"20"},{"abilityName":"Elementarkunde","scoreRate":"50"},{"abilityName":"Krit-Chance","scoreRate":"80"},{"abilityName":"Krit-Schaden","scoreRate":"50"}]'
></r-radar>Gitterfarbe colorPolygon
<r-radar
style="width:300px;height:300px;display:block;"
colorPolygon="green"
abilitys='[{"abilityName":"Leben","scoreRate":"10"},{"abilityName":"Angriff","scoreRate":"90"},{"abilityName":"Verteidigung","scoreRate":"20"},{"abilityName":"Elementarkunde","scoreRate":"50"},{"abilityName":"Krit-Chance","scoreRate":"80"},{"abilityName":"Krit-Schaden","scoreRate":"50"}]'
></r-radar>Achsenfarbe colorLine
<r-radar
style="width:300px;height:300px;display:block;"
colorLine="blue"
abilitys='[{"abilityName":"Leben","scoreRate":"10"},{"abilityName":"Angriff","scoreRate":"90"},{"abilityName":"Verteidigung","scoreRate":"20"},{"abilityName":"Elementarkunde","scoreRate":"50"},{"abilityName":"Krit-Chance","scoreRate":"80"},{"abilityName":"Krit-Schaden","scoreRate":"50"}]'
></r-radar>Füllfarbe der Fläche fillColor
<r-radar
style="width:300px;height:300px;display:block;"
fillColor="red"
abilitys='[{"abilityName":"Leben","scoreRate":"10"},{"abilityName":"Angriff","scoreRate":"90"},{"abilityName":"Verteidigung","scoreRate":"20"},{"abilityName":"Elementarkunde","scoreRate":"50"},{"abilityName":"Krit-Chance","scoreRate":"80"},{"abilityName":"Krit-Schaden","scoreRate":"50"}]'
></r-radar>Umrissfarbe der Fläche strokeColor
<r-radar
style="width:300px;height:300px;display:block;"
strokeColor="blue"
abilitys='[{"abilityName":"Leben","scoreRate":"10"},{"abilityName":"Angriff","scoreRate":"90"},{"abilityName":"Verteidigung","scoreRate":"20"},{"abilityName":"Elementarkunde","scoreRate":"50"},{"abilityName":"Krit-Chance","scoreRate":"80"},{"abilityName":"Krit-Schaden","scoreRate":"50"}]'
></r-radar>Vollständige Beispieldaten
Weil ein HTML-attribute nur eine string tragen kann, müssen die übergebenen Daten eine json-Zeichenkette sein, die mit JSON.parse zurück in ein Array von Objekten gelesen wird; fehlerhaftes JSON lässt sich nicht lesen:
[
{
"abilityName": "Leben",
"scoreRate": "10",
"backgroundColor": "red",
"fontSize": "30",
"fontColor": "blue"
},
{
"abilityName": "Angriff",
"scoreRate": "90"
},
{
"abilityName": "Verteidigung",
"scoreRate": "20"
},
{
"abilityName": "Elementarkunde",
"scoreRate": "50"
},
{
"abilityName": "Krit-Chance",
"scoreRate": "80"
},
{
"abilityName": "Krit-Schaden",
"scoreRate": "50"
}
]CSS-Variablen
Die Diagrammfarben lassen sich auch (themereaktiv) über CSS-Custom-Properties am Host setzen:
| Variable | Standard | Beschreibung |
|---|---|---|
--ran-radar-polygon-color | var(--ran-color-border) / #e6e6e6 | Farbe der Gitterpolygone |
--ran-radar-line-color | var(--ran-color-border) / #e6e6e6 | Farbe der Achsenlinien |
--ran-radar-fill-color | rgba(255,121,35,0.60) | Füllfarbe der Datenfläche |
--ran-radar-stroke-color | rgba(255,121,35,0.60) | Umrissfarbe der Datenfläche |
--ran-radar-width | 100% | Breite des Canvas-Containers |
--ran-radar-height | 100% | Höhe des Canvas-Containers |
--ran-radar-display | block | display des Canvas-Containers |
--ran-radar-position | relative | position des Canvas-Containers |
Die Textfarbe der Beschriftungen greift ebenfalls auf das Theme-Token --ran-color-text zurück, damit sie im hellen wie im dunklen Modus lesbar bleiben.
Events
Keine. <r-radar> löst keine eigenen Events aus.
Bewährte Praxis
- Größe: Der Host hat keine eigene Größe; setze immer eine ausdrückliche
width/height(überstyleoder die Variablen--ran-radar-width/--ran-radar-height). Bei Größenänderungen des Containers zeichnet sich das Diagramm über einenResizeObserverselbst neu. - Datenformat: Übergib gültiges JSON in
abilitys; fehlerhaftes JSON wird protokolliert und kann nicht gelesen werden. Arbeite im Skript mit echten Arrays über die JS-Eigenschaftabilitys. - Skala:
scoreRatemisst gegen ein festes Maximum von100; normalisiere deine Werte auf diesen Bereich. - Theming: Die Farbattribute (
colorPolygon,colorLine,fillColor,strokeColor) sind reaktiv und zeichnen das Diagramm neu, wenn du sie nach dem Mounten änderst. Sollen die Farben dem hellen bzw. dunklen Theme von selbst folgen, nimm die CSS-Variablen--ran-radar-*.