Reputation: 61115
In a situation similar to Changing cursor to pointer on Chart.js bar chart when hover (mousemove) event is disabled? I'm trying to change cursor on hover. However, in my case it's on a pie chart segment and not a label. We're navigating to related pages on click of each segment.
For version 2 we did this:
options: {
hover: {
onHover: function(ev, el) {
ev.target.style.cursor = el[0] ? 'pointer' : 'default';
}
}
}
This no longer works with v3, though. The native element doesn't seem available. I've spelunked through the data available on the event and can't find the actual element.
Here's my latest attempt:
options: {
onHover: function(e) {
e.native.target.style.cursor = 'pointer';
}
}
I've also tried via activeEls
:
options: {
onHover: function(e, activeEls) {
if (activeEls.length) {
activeEls[0].style.cursor = 'pointer';
}
}
}
The data there looks like this:
How can I access the segment element to apply styling?
Upvotes: 2
Views: 1656
Reputation: 2640
For who is using ChartJS 4 and come across this question without success to to find the element like previous version. From version 3.x, you can access directly to chart
object in onHover
.
options.onClick and options.onHover now receive the chart instance as a 3rd argument
To change the cursor to pointer, you can do like below:
onHover: (event: ChartEvent, chartElement: ActiveElement[], chart) => {
chartElement.length > 0 ? chart.canvas.style.cursor = 'pointer' : chart.canvas.style.cursor = 'default';
},
it should do the trick
Upvotes: 1
Reputation: 31431
You can get the chart instance from the event which has the canvas on which you can target the mouse like so:
const options = {
type: 'pie',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
}]
},
options: {
onHover: (evt, activeEls) => {
activeEls.length > 0 ? evt.chart.canvas.style.cursor = 'pointer' : evt.chart.canvas.style.cursor = 'default';
}
}
}
const ctx = document.getElementById('chartJSContainer').getContext('2d');
new Chart(ctx, options);
<body>
<canvas id="chartJSContainer" width="600" height="400"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.6.1/chart.js"></script>
</body>
Upvotes: 1