ドーナツチャートにパーセント値を表示しようとしています。私の機能が正しく動作するためには、コールバック内のチャートインスタンスにアクセスする必要があります。私はそれをする方法を知らない?Chart.jsの現在のツールチップコールバックに関連するChartインスタンスへのアクセス方法
Chart.pluginService beforeDrawイベントを使用して処理しましたが、期待通りに機能しません。
ツールチップコールバック内でbeforeDrawイベントからコードを移動する方法はありますか?
これは、私はあなたの問題を解決するための最善のアプローチは、実際にプラグインをしようとするのではなく、custom tooltipsを使用することだと思います私のコード
tooltips: {
callbacks: {
label: function (tooltipItem, data) {
var precentage = dataFromDoughnutChart;
localStorage.setItem("per", precentage.toString());
return precentage + "%";
}
}
}
Chart.pluginService.register({
beforeDraw: function (chart) {
var value = "";
var x = localStorage.getItem("per");
if (x != null)
value = x + "%";
var width = chart.chart.width,
height = chart.chart.height,
ctx = chart.chart.ctx;
ctx.restore();
var fontSize = (height/100).toFixed(2);
ctx.font = fontSize + "em sans-serif";
ctx.textBaseline = "middle";
var text = value,
textX = Math.round((width - ctx.measureText(text).width)/2),
textY = height/2;
ctx.fillText(text, textX, textY);
ctx.save();
},
afterEvent: function (chart, event) {
if (event.type == "mouseout") {
localStorage.removeItem("per");
}
}
});
あなたがより詳細にやろうとか説明できますか?ユーザーがドーナツをスライスした部分をロールオーバーしたときの割合を中央に表示しようとしていますか?また、あなたのアプローチに間違った振る舞いがあることを説明できますか?私は以前も同様のことをしていますが、あなたが何を理解しているか分かるまで共有したくありません。 – jordanwillis
そうです、私はそれを正確に達成しようとしています。 beforeDrawイベントが複数回呼び出されるという誤った動作です。私はページ上にただ1つのドーナツチャートしか持っていません。そして、ドーナツチャートスライスから2番目のチャートにカーソルをすばやく移動すると、両方のチャートが同じ値をチャートの中央に表示しています。 [link] https://jsfiddle.net/cmyker/ooxdL2vj/ に基づいて何かをしようとしていて、ツールチップのコールバックから中間チャート領域のデータを入力しようとしています。 あなたの返信ありがとう – consoleapplication