2017-10-18 13 views
0

グラフをクリックしたいチャートのChartをチャート上に表示し、グラフの中央にそのセグメントに関する情報を表示します。私はこの作業をしていますが、マウスがチャートセグメントを離れるたびに情報が消えるたびに、別のチャートセグメントがクリックされるまで情報が残るようにします。キャンバスにキャンバスを描画すると、マウスがチャートを離れるときにテキストが消去されます

私は、チャートの中央にテキストを維持するにはどうすればよいJSFIDDLE

canvas.onclick = function(evt) { 
    var activePoints = donut.getElementsAtEvent(evt); 
    if(activePoints[0]) { 
     var chartData = activePoints[0]['_chart'].config.data; 
     var idx = activePoints[0]['_index']; 
     var label = chartData.labels[idx].toUpperCase(); 

     ctx.font = "bold 18px Verdana, Arial, sans-serif"; 
     var textWidth = ctx.measureText(label).width; 

     ctx.fillStyle = "#000"; 
     ctx.fillText(label, (250/2) - (textWidth/2), (250/2)); 
    } 
}; 

に本の基本的な例を入れていますか?

答えて

1

代わりにplugin apiを使用してください(Chart.jsによって管理されているように)キャンバスに直接描画しないでください。提供されているフックの1つを使用することができます。例えば、afterDrawは、グラフが描かれた後にあなたのものを描画します。

ワーキングJSFiddle:
https://jsfiddle.net/fa7s5q30/12/

+0

あなたはjsfiddleで働くことを得ることができますか?私は試してみましたが、何も違いはありません(https://jsfiddle.net/fa7s5q30/7/)。すべてのコードを 'afterDraw'に移動するとhttps://jsfiddle.net/fa7s5q30/8/になります。 – anothershrubery

+0

確かに、私は私の答えを更新しました。 'afterDraw'は、グラフが再描画されるたびに呼び出されます(これはマウス移動でもあります)。そのため、選択したラベルをどこかに保存する必要があります。私はそれをグラフインスタンスに添付することを選択しました。 –

+0

これはChromeでうまくいきますが、IE11ではグラフが表示されません。デバッガの問題にもフラグを立てません。どのような方法ラウンド? – anothershrubery

関連する問題