I’m utilizing Highcharts in my code. Currently, when a user clicks on a legend item (for example, "ABC"), the corresponding pie labeled "ABC" changes to a gray color. Upon clicking again, the gray color is removed and the pie reverts to its original color. Now, I wish to enhance this functionality by adding a strikethrough effect to the "ABC" legend item when the pie turns gray, and removing the strikethrough when the pie returns to its original color.
Highcharts.chart('container', {
series: [{
type: 'pie',
data: [1, 2, 3, 4],
showInLegend: true,
point: {
events: {
legendItemClick: function() {
var originalColor = this.options.originalColor; // Retrieve original color from options
var newColor = (this.color === 'gray') ? originalColor : 'gray'; // Toggle between gray and original color
// Toggle visibility of data labels
var showDataLabels = (newColor !== 'gray');
this.update({
color: newColor,
dataLabels: {
enabled: showDataLabels
}
});
return false;
}
}
},
events: {
afterInit: function() {
// Store original color for each point
this.points.forEach(function(point) {
point.options.originalColor = point.color;
});
}
}
}],
accessibility: {
enabled: false,
},
});
<script src="https://code.highcharts.com/highcharts.js"></script>
<div id="container"></div>
2
Answers
Since Highcharts generates its charts as SVG, you cannot use normal CSS styles with them.
The hackish walkaround is to use JS events and override styles after the Highcharts have applied them.
Please let me know if this helps.
You can use the legend
labelFormatter
to inject a styled HTML label when your gray colour is applied.