Chart.jsで 2 つ以上のリンクされた Canvas-Charts を処理するには? このスクリプトを使用すると、キャンバス イメージがより大きなバージョンにリンクされて、大きなファイルがファンシー ボックスに表示されるか、2 つだけダウンロードされます (右クリック -> 保存)。簡単。
<a HREF="#" id="canvas_link_1">
<canvas id="image1"></canvas>
</a>
<a HREF="#" id="canvas_link_2">
<canvas id="image2"></canvas>
</a>
Chart.jsでtoDataURL()を使用するには少し注意が必要です。これは、アニメーションが終了する前ではなくチャート全体をレンダリングするためです。URL を要求するのが早すぎると、空の (透明な) 画像が表示されます。そのため、オプションにonAnimationCompleteが必要です。
var options = {
onAnimationComplete: done
}
スクリプトの後半で、アニメーションが終了すると、新しい HREF が起動/変更されます。
var ct1 = document.getElementById("image1").getContext("2d");
ct1.canvas.width = document.getElementById("image1").offsetWidth;
ct1.canvas.height = document.getElementById("image1").offsetHeight;
var Chart1 = new Chart(ct1).Line(lineChartData1,options);
function done() {
var url1=document.getElementById("image1").toDataURL();
document.getElementById("canvas_link_1").href=url1;
}
var ct2 = document.getElementById("image2").getContext("2d");
ct2.canvas.width = document.getElementById("image2").offsetWidth;
ct2.canvas.height = document.getElementById("image2").offsetHeight;
var Chart2 = new Chart(ct2).Line(lineChartData2,options);
function done() {
var url2=document.getElementById("image2").toDataURL();
document.getElementById("canvas_link_2").href=url2;
}
それはうまくいきます。ただし、canvas-imageは1 つだけです。2 番目の関数 done()を削除すると、1 番目のキャンバスで機能します。1 番目の関数を削除すると、2 番目のキャンバスだけが URL を表示します。
問題は「完了」にあると思います。それは名前ではなく、状況のようなものですか? 「var options」はすべてのキャンバス画像に一般的です(確かに、options1とoptions2、および「Line(lineChartData1、options1)」にも変更できますが、変更はありません)...「done」はすべての関数を起動しますそして - それは悪い - どうやら最後の機能だけです。
反対側では、onAnimationCompleteのエントリの名前を変更できません。それはnullまたは完了であり、他には何もありません。何をすべきか?