3 回答

TA貢獻1802條經驗 獲得超10個贊
您只需要等到圖表加載完畢才能獲取圖像。
我可以通過快速搜索找到的唯一回調是動畫 onComplete。
這是一個顯示它工作的小提琴。
animation: {
onComplete: function() {
document.getElementById('coolImage').setAttribute('src', lineChart.toBase64Image());
}
}

TA貢獻1777條經驗 獲得超10個贊
您的代碼正在運行,但Kokodoko 是正確的,“在您嘗試讀取畫布之前,圖形可能尚未完全繪制”,因此該圖像只是一個空白畫布。
但是,我可以立即想到以下兩種方法來設置圖像,而不是手動按下按鈕:
關閉動畫:
options: {
animation: {
duration: 0 // general animation time
},
...
延遲閱讀畫布:
setTimeout(() => {
document.getElementById('coolImage').setAttribute('src', lineChart.toBase64Image());
}, 1000); // execute after 1 second.

TA貢獻1880條經驗 獲得超4個贊
您可以從帶有toDataURL(). 但是在您的情況下,在您嘗試閱讀畫布之前,圖形可能尚未完全繪制。
如果我將繪圖代碼放在一個按鈕中,它會起作用:
HTML
<body>
<canvas id="chartJSContainer" width="100" height="100"></canvas>
<img src="" id="coolImage" class="img-fluid" alt="Responsive image">
<button id="create">Create image</button>
</body>
JAVASCRIPT
var canvas = document.getElementById('chartJSContainer');
var ctx = canvas.getContext('2d');
var lineChart = new Chart(ctx, options);
var button = document.getElementById("create")
button.addEventListener("click", function() {
var dataURL = canvas.toDataURL();
console.log(dataURL);
document.getElementById('coolImage').src = dataURL;
})
添加回答
舉報