[Chartjs]-Click anchors the label to its respective section HTML in Chart.js

1👍

To access the selected field, just you need to use internal links.

You need to add modify the html to be like this :

<canvas id="chartDonnut"></canvas>
<div id="red" class="redSection">
    <p>Red Section</p>
</div>
<div id="orange" class="orangeSection">
    <p>Orange Section</p>
</div>
<div id="yellow" class="yellowSection">
    <p>Yellow Section</p>
</div>
<div id="green" class="greenSection">
    <p>Green Section</p>
</div>

And for the jquery code, it’ll be like this :

// Chart
var barData = {
    labels: ['Red', 'Orange', 'Yellow', 'Green']
};


var pieData = [{
    value: 40,
    color: "#ad1f27",
    highlight: "#ad474c",
    label: "Red"
}, {
    value: 40,
    color: "#c26828",
    highlight: "#c27e4d",
    label: "Orange"
}, {
    value: 10,
    color: "#c3b830",
    highlight: "#c3bc6b",
    label: "Yellow"
}, {
    value: 10,
    color: "#14773c",
    highlight: "#2da15b",
    label: "Green"
}];

var options = {
    segmentShowStroke: false
};

Chart.defaults.global.responsive = true;

var context = document.getElementById('chartDonnut').getContext('2d');
var skillsChart = new Chart(context).Doughnut(pieData, options);

$("#chartDonnut").click(function(evt) {
    var activePoints = skillsChart.getSegmentsAtEvent(evt);
    var url = activePoints[0].label + activePoints[0].value + activePoints[0].x + activePoints[0].y;
    if(activePoints[0].label=="Red"){
       window.location="#red";
    }
    if(activePoints[0].label=="Orange"){
       window.location="#orange";
    }
    if(activePoints[0].label=="Yellow"){
       window.location="#yellow";
    }
    if(activePoints[0].label=="Green"){
       window.location="#green";
    }
});

1👍

Here’s the modified data that should be in the click handler:

$("#chartDonnut").click(function(evt) {
    var sector = skillsChart.getSegmentsAtEvent(evt)[0].label;
    document.getElementsByClassName(sector.toLowerCase()+'Section')[0].scrollIntoView();
});

Working jsfiddle: http://jsfiddle.net/1efr492j/1/

Note that it will jump to the other spot, not smoothly scroll there. If you want it to smoothly scroll, look here for some suggestions: scrollintoview animation

The other answer will work as well, but this is a bit less invasive and changes less code

Leave a comment