javascript - 使用同一画布在不同 Chart.js 图表之间切换
问题描述
我有一个带有一个大画布的页面,以及一个由代表不同图表的多个 div 填充的菜单。每次我从菜单中单击一个 div 时,画布上的图表都会发生变化。
将相同的画布分配给不同的图表会使画布在鼠标移动时发疯。
每当单击菜单中的图表时,我尝试运行 chart.update() 并清除画布,但问题仍然存在。
解决方案
更改图表类型是一个根本区别,您需要完全destroy()
现有图表,然后实例化一个新实例。否则,Chart.js 在实例化时选择的默认值无效,正如您所注意到的,这会导致一些奇怪的行为。
以下代码段演示了一种方法:
let chart;
function mychart(type) {
if (chart) {
chart.destroy();
}
chart = new Chart(document.getElementById("chart"), {
type: type,
data: {
labels: ["a", "b", "c", "d"],
datasets: [{
label: "Series1",
data: [0, 1, 2, 4]
}]
}
})
}
document.getElementById("line").addEventListener("click", function() {
mychart("line");
});
document.getElementById("bar").addEventListener("click", function() {
mychart("bar");
});
document.getElementById("doughnut").addEventListener("click", function() {
mychart("doughnut");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js"></script>
<p>
<button id="line">Line</button>
<button id="bar">Bar</button>
<button id="doughnut">Doughnut</button>
</p>
<canvas id="chart"></canvas>
推荐阅读
- php - HTTP/2 服务器推送不起作用,我做错了什么?
- python - 绘制具有周期性边界且没有分段的 nices 曲线
- vue.js - 在 Vue 中处理链表
- node.js - 混合面板安装后源地图不显示
- c# - 在 IIS-10 中发布后,ASP.NET Core MVC 2.1.0 会话不起作用
- python-3.x - python:如何将我的枚举字符串变成字典?
- java - 自定义 Android CalendarView - 显示 DropdownMenu
- java - 上下文配置不加载bean并抛出空指针异常
- r - 使用 finstr 下载 R 中的财务报表
- sql - 无法在 SQL manager lite 中创建新过程