Мне нужно показать независимые эффекты при наведении курсора на столбцы в моем графике js.
Задача
Когда я наводю один из баров, следующий получает егостиль наведения.
Если я наведу черный, он должен получить более светлый цвет, но синий не должен меняться, пока я не наведу его.
Это мой код. без макетов данных
import React from 'react';
import { Bar } from 'react-chartjs-2';
import { Wrapper, LegendsWrapper } from './style';
import Legend from './Legend/Legend';
const Chart = ({ labels, graphData, colors = ['#17C7D6', '#02193D'] }) => {
const innerData = {
labels,
datasets: graphData.map(({ category, data }, i) => ({
label: category,
data,
backgroundColor: Array(data.length).fill(colors[i]),
yAxisID: category,
})),
};
const options = {
tooltips: {
filter: tooltipItem => tooltipItem.datasetIndex === 0,
backgroundColor: `#fff`,
titleFontFamily: `var(--main-font)`,
titleFontColor: '#000',
bodyFontFamily: `var(--main-font)`,
bodyFontSize: 10,
bodyFontColor: `#888888`,
// mode: 'nearest',
cornerRadius: 4,
position: 'nearest',
},
onHover: (e, el) => {
const section = el[0];
const currentStyle = e.target.style;
console.log(e.target);
currentStyle.color = section && section._start ? 'red' : 'green'; // <-- default here
currentStyle.cursor = section ? 'pointer' : 'default'; // <-- default here
},
layout: {
padding: {
left: 0,
right: 0,
top: 0,
bottom: 10,
},
},
legend: {
display: false,
},
maintainAspectRatio: false,
scales: {
pointLabels: {
fontStyle: 'bold',
},
xAxes: [
{
categoryThickness: 200,
barThickness: 12,
gridLines: {
// display: false,
drawOnChartArea: false,
tickMarkLength: 4,
color: `#052442`,
},
ticks: {
min: 0,
fontFamily: `var(--main-font)`,
fontSize: 8,
fontColor: `#9E9E9E`,
padding: 15,
maxRotation: -45,
minRotation: -45,
},
},
],
yAxes: [
{
id: graphData[0].category,
ticks: {
min: 0,
fontFamily: `var(--main-font)`,
fontSize: 8,
fontColor: `#6e6e6e`,
padding: 5,
},
gridLines: {
drawOnChartArea: false,
drawBorder: true,
tickMarkLength: 4,
color: `#052442`,
},
},
{
id: graphData[1].category,
position: 'right',
ticks: {
fontFamily: `var(--main-font)`,
fontSize: 8,
fontColor: `#6e6e6e`,
padding: 5,
},
gridLines: {
// display: false,g
drawOnChartArea: false,
drawBorder: true,
tickMarkLength: 4,
color: `#052442`,
},
},
],
},
};
return (
<Wrapper>
<LegendsWrapper>
{graphData.map(({ category }, i) => (
<Legend text={category} color={colors[i]} />
))}
</LegendsWrapper>
<Bar data={innerData} options={options} />
</Wrapper>
);
};
export default Chart;
Макет данных
labels: ['1950', '1960', '1970', '1980', '1990', '2000', '2010'],
graphData: [
{
category: 'EHR Patients',
data: [11500, 11600, 14000, 19700, 13000, 3000, 2300],
},
{
category: 'IGM Patients',
data: [1.2, 3.8, 16.2, 19, 11.7, 1.4, 1.2],
},
],
Я пробовал hover:() => {}
, а также hoverBackgroundColor
, но этовсегда запускает стили наведения для ботов.
Это полный график.
Ожидаемое поведение
Когда я наведу черную полосу, он изменит его цвет на любой другой цвет, например, «красный».
Но синий должен остаться прежним, а когда я наведу синююон должен изменить свой цвет на любой другой цвет, например, «зеленый».