Radar
Gráfico de radar para comparar várias métricas de um mesmo conjunto de dados num canvas bidimensional.
Use quando precisar de um gráfico de radar para comparar várias métricas de um conjunto de dados. Passe ao
<r-radar>um array JSON de nomes de eixo e pontuações pelo atributoabilitys.
Início rápido
Uso básico
Os dados vêm pelo atributo abilitys como uma string JSON (um array de objetos). Como atributos HTML só podem guardar strings, o valor precisa ser JSON válido; ele é analisado internamente com JSON.parse. O host <r-radar> não tem tamanho próprio, então dê a ele largura e altura explícitas.
<r-radar
style="width:300px;height:300px;display:block;"
abilitys='[{"abilityName":"Vida","scoreRate":"10"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defesa","scoreRate":"20"},{"abilityName":"Maestria elemental","scoreRate":"50"},{"abilityName":"Chance de crítico","scoreRate":"80"},{"abilityName":"Dano crítico","scoreRate":"50"}]'
></r-radar>Você também pode definir os dados de forma imperativa pela propriedade JS abilitys, que aceita um array (convertido de volta em string no atributo) ou uma string JSON:
const radar = document.createElement('r-radar');
radar.abilitys = [
{ abilityName: 'Vida', scoreRate: 10 },
{ abilityName: 'Ataque', scoreRate: 90 },
{ abilityName: 'Defesa', scoreRate: 20 },
];
chart.append(radar);Referência da API
Propriedades
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
abilitys | string / Array | '' | Dados do gráfico como string JSON (ou array pela propriedade JS) |
colorPolygon | string | var(--ran-radar-polygon-color) / #e6e6e6 | Cor dos polígonos concêntricos da grade |
colorLine | string | var(--ran-radar-line-color) / #e6e6e6 | Cor dos eixos e da borda externa |
fillColor | string | rgba(255,121,35,0.60) | Cor de preenchimento da região de dados |
strokeColor | string | rgba(255,121,35,0.60) | Cor do contorno da região e dos pontos de vértice |
sheet | string | '' | CSS injetado no shadow DOM do componente |
Cada entrada do array abilitys aceita estas chaves:
| Chave | Tipo | Obrigatória | Descrição |
|---|---|---|---|
abilityName | string | Sim | Texto do rótulo do eixo |
scoreRate | number | Sim | Valor naquele eixo; a grade vai no máximo até 100 |
backgroundColor | string | Não | Cor de fundo do rótulo (padrão transparente) |
fontSize | number | Não | Tamanho da fonte do rótulo (padrão escalado ao gráfico) |
fontColor | string | Não | Cor do texto do rótulo (padrão --ran-color-text) |
fontFamily | string | Não | Família tipográfica do rótulo (padrão SimHei) |
Nota:
colorPolygon,colorLine,fillColorestrokeColorsão lidos sem diferenciar maiúsculas, então desenham certo tanto se o atributo já estiver lá quanto se mudar depois da montagem; atualizar qualquer um deles redesenha o gráfico. Para um estilo que siga o tema, prefira as variáveis CSS mais abaixo.
Dados do gráfico abilitys
O estilo do rótulo por eixo (backgroundColor, fontSize, fontColor) pode ser definido em entradas específicas:
<r-radar
style="width:300px;height:300px;display:block;"
abilitys='[{"abilityName":"Vida","scoreRate":"10","backgroundColor":"red","fontSize":"30","fontColor":"blue"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defesa","scoreRate":"20"},{"abilityName":"Maestria elemental","scoreRate":"50"},{"abilityName":"Chance de crítico","scoreRate":"80"},{"abilityName":"Dano crítico","scoreRate":"50"}]'
></r-radar>Cor da grade colorPolygon
<r-radar
style="width:300px;height:300px;display:block;"
colorPolygon="green"
abilitys='[{"abilityName":"Vida","scoreRate":"10"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defesa","scoreRate":"20"},{"abilityName":"Maestria elemental","scoreRate":"50"},{"abilityName":"Chance de crítico","scoreRate":"80"},{"abilityName":"Dano crítico","scoreRate":"50"}]'
></r-radar>Cor dos eixos colorLine
<r-radar
style="width:300px;height:300px;display:block;"
colorLine="blue"
abilitys='[{"abilityName":"Vida","scoreRate":"10"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defesa","scoreRate":"20"},{"abilityName":"Maestria elemental","scoreRate":"50"},{"abilityName":"Chance de crítico","scoreRate":"80"},{"abilityName":"Dano crítico","scoreRate":"50"}]'
></r-radar>Preenchimento da região fillColor
<r-radar
style="width:300px;height:300px;display:block;"
fillColor="red"
abilitys='[{"abilityName":"Vida","scoreRate":"10"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defesa","scoreRate":"20"},{"abilityName":"Maestria elemental","scoreRate":"50"},{"abilityName":"Chance de crítico","scoreRate":"80"},{"abilityName":"Dano crítico","scoreRate":"50"}]'
></r-radar>Contorno da região strokeColor
<r-radar
style="width:300px;height:300px;display:block;"
strokeColor="blue"
abilitys='[{"abilityName":"Vida","scoreRate":"10"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defesa","scoreRate":"20"},{"abilityName":"Maestria elemental","scoreRate":"50"},{"abilityName":"Chance de crítico","scoreRate":"80"},{"abilityName":"Dano crítico","scoreRate":"50"}]'
></r-radar>Dados de exemplo completos
Como um attribute de HTML só consegue carregar uma string, os dados que você passa precisam ser uma string json, convertida de volta num array de objetos com JSON.parse; um JSON malformado não pode ser analisado:
[
{
"abilityName": "Vida",
"scoreRate": "10",
"backgroundColor": "red",
"fontSize": "30",
"fontColor": "blue"
},
{
"abilityName": "Ataque",
"scoreRate": "90"
},
{
"abilityName": "Defesa",
"scoreRate": "20"
},
{
"abilityName": "Maestria elemental",
"scoreRate": "50"
},
{
"abilityName": "Chance de crítico",
"scoreRate": "80"
},
{
"abilityName": "Dano crítico",
"scoreRate": "50"
}
]Variáveis CSS
As cores do gráfico também podem ser definidas (de forma reativa ao tema) por propriedades personalizadas de CSS no host:
| Variável | Padrão | Descrição |
|---|---|---|
--ran-radar-polygon-color | var(--ran-color-border) / #e6e6e6 | Cor da grade |
--ran-radar-line-color | var(--ran-color-border) / #e6e6e6 | Cor dos eixos |
--ran-radar-fill-color | rgba(255,121,35,0.60) | Preenchimento da região de dados |
--ran-radar-stroke-color | rgba(255,121,35,0.60) | Contorno da região de dados |
--ran-radar-width | 100% | Largura do contêiner do canvas |
--ran-radar-height | 100% | Altura do contêiner do canvas |
--ran-radar-display | block | display do contêiner do canvas |
--ran-radar-position | relative | position do contêiner do canvas |
A cor do texto dos rótulos também recorre ao token de tema --ran-color-text, então os rótulos continuam legíveis nos modos claro e escuro.
Eventos
Nenhum. O <r-radar> não despacha eventos personalizados.
Boas práticas
- Dimensionamento: o host não tem tamanho próprio; sempre defina
width/heightexplícitos (pelostyleou pelas variáveis--ran-radar-width/--ran-radar-height). O gráfico se redesenha sozinho quando o contêiner muda de tamanho, viaResizeObserver. - Formato dos dados: passe JSON válido em
abilitys; JSON malformado é registrado e não pode ser analisado. Use a propriedade JSabilitysquando trabalhar com arrays de verdade no código. - Escala:
scoreRateé medido contra um máximo fixo de100; normalize seus valores para essa faixa. - Temas: os atributos de cor (
colorPolygon,colorLine,fillColor,strokeColor) são reativos e redesenham o gráfico quando mudam após a montagem. Prefira as variáveis CSS--ran-radar-*quando quiser que as cores sigam sozinhas o tema claro ou escuro.