[解決済み] chart.jsの棒グラフを破棄して、同じ<canvas>に他のグラフを再描画する。
質問
私は Chart.js ライブラリを使って 棒グラフ で、うまく動作しているのですが、今度は 棒グラフ を破壊して 折れ線グラフ を同じ キャンバス . 私は、キャンバスをクリアするために、これら2つの方法を試してみました。
var grapharea = document.getElementById("barChart").getContext("2d");
grapharea.destroy();
var myNewChart = new Chart(grapharea, { type: 'radar', data: barData, options: barOptions });
第二の方法
var grapharea = document.getElementById("barChart").getContext("2d");
grapharea.clear();
var myNewChart = new Chart(grapharea, { type: 'radar', data: barData, options: barOptions });
正しく呼び出せていますか?OnButtonClickでは、同じcanvasを使用するこの関数を呼び出しています。
どのように解決するのですか?
同じキャンバスに別のグラフを描くための正しい方法は
.destroy()
. このメソッドは、先に作成されたチャートオブジェクトに対して呼び出さなければなりません。また、両方のチャートに同じ変数を使用することもできます。
var grapharea = document.getElementById("barChart").getContext("2d");
var myChart = new Chart(grapharea, { type: 'bar', data: barData, options: barOptions });
myChart.destroy();
myChart = new Chart(grapharea, { type: 'radar', data: barData, options: barOptions });
そのまま ドキュメント (プロトタイプメソッド) の下にある :
.destroy()
これは、作成されたすべてのチャート・インスタンスを破棄するために使用します。これは、Chart.js内でチャートオブジェクトに保存されたすべての参照と、Chart.jsによって取り付けられたすべての関連イベントリスナーをクリーンアップします。これは、キャンバスが新しいチャートのために再利用される前に呼び出されなければなりません。
// Example from the docs
var myLineChart = new Chart(ctx, config);
// Destroys a specific chart instance
myLineChart.destroy();
キャンバスを新しいチャートに再利用する前に、このメソッドを呼び出さなければならないことが明示されています。
.clear()
はまた、同じセクションの後半で、チャートキャンバスをクリアする関数として言及されています。このメソッドを呼び出した後もチャートは健在なので、新しいチャートのためにキャンバスを再利用したい場合は、このメソッドを呼び出すべきではありません。
正直なところ、あなたのようなケースでは、私はしばしばコンテナである
div
をラップするために
canvas
をラップし、新しいチャートを作成する必要があるときはいつでも、新しい
canvas
要素をこの
div
. 次に、この新しく作成した
canvas
を新しいチャートに使っています。もしあなたが、現在のチャートの前にあるキャンバスをチャートが占めることに関連した奇妙な動作に遭遇したら、このアプローチも覚えておいてください。
関連
-
[解決済み] Chart.jsでチャートの高さを設定する
-
[解決済み] ホバーイベントをトリガーできないように、キャンバスからチャートをクリアするにはどうすればよいですか?
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] ECMAScriptとは?
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] ホバーイベントをトリガーできないように、キャンバスからチャートをクリアするにはどうすればよいですか?
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?