Chart.js グラフにクリックイベント追加

まず、Chart.js日本語ドキュメントに沿って雛形を作成した状態
https://misc.0o0o.org/chartjs-doc-ja/getting-started/

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<link rel="stylesheet"  href="style.css">
<title></title>
</head>
<body>

<canvas id="myChart"></canvas>

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.min.js"></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var chart = new Chart(ctx, {
    // 作成したいチャートのタイプ
    type: 'bar',

    // データセットのデータ
    data: {
        labels: ["1月", "2月", "3月", "4月", "5月", "6月", "7月"],
        datasets: [{
            label: "初めてのデータセット",
            backgroundColor: 'rgb(255, 99, 132)',
            borderColor: 'rgb(255, 99, 132)',
            data: [0, 10, 5, 2, 20, 30, 45],
        }]
    },

    // ここに設定オプションを書きます
    options: {}
});
</script>

</body>
</html>

※棒グラフの方が分かりやすいので
 type: ‘line’をtype: ‘bar’に変更してあります。

棒グラフをクリックしたら
その棒グラフの値をアラート表示するようにします。

var ctx = document.getElementById('myChart').getContext('2d');

の下に↓を追加

var context = document.getElementById('myChart');

追加しなくても

var ctx = document.getElementById('myChart').getContext('2d');

var ctx = document.getElementById('myChart');

に変更してもOKな気がしますが。。。
その場合は、後述する
context.addEventListener( ‘click’, function( evt ){

ctx.addEventListener( ‘click’, function( evt ){
にする。

さらに↓の下に

    options: {}
});

↓を追加

context.addEventListener( 'click', function( evt ){
    var item = chart.getElementAtEvent( evt );
    if( item.length == 0 ){
        return;
    }

    item = item[0];
    var index = item._index;
    var item_data = item._chart.config.data.datasets;
    alert( item_data[0]['data'][index] );
});

■全体ソース

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<link rel="stylesheet"  href="style.css">
<title></title>
</head>
<body>

<canvas id="myChart"></canvas>

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.min.js"></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var context = document.getElementById('myChart');
var chart = new Chart(ctx, {
    // 作成したいチャートのタイプ
    type: 'bar',

    // データセットのデータ
    data: {
        labels: ["1月", "2月", "3月", "4月", "5月", "6月", "7月"],
        datasets: [{
            label: "初めてのデータセット",
            backgroundColor: 'rgb(255, 99, 132)',
            borderColor: 'rgb(255, 99, 132)',
            data: [0, 10, 5, 2, 20, 30, 45],
        }]
    },

    options: {}
});

context.addEventListener( 'click', function( evt ){
    var item = chart.getElementAtEvent( evt );
    if( item.length == 0 ){
        return;
    }

    item = item[0];
    var index = item._index;
    var item_data = item._chart.config.data.datasets;
    alert( item_data[0]['data'][index] );
});
</script>

</body>
</html>

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です