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;
})
添加回答
举报
