Javascript ChartJS 永久更新图表和 Canvas

标签 javascript canvas charts

我在 ChartJS 中制作了一个图表,我想根据用户从下拉列表中选择的内容使用新数据来更新它,并使用相同的 Canvas 。问题是当我执行更新功能时,图表会使用新数据进行更新,但一段时间后它会不断返回到原始图表。我该如何解决这个问题?这是代码,谢谢您的帮助:

/* Original Chart */
var ctx3 = document.getElementById("canvas3").getContext("2d");

var canvas3 = new Chart(ctx3, {
    type: 'line',
    data: {
        labels: stationRentalsLabels,
        datasets: [{
            label: 'Wypożyczenia',
            fillColor: "rgba(220,280,220,0.5)",
            strokeColor: "rgba(220,220,220,1)",
            backgroundColor: "rgba(153,255,51,0.4)",
            data: stationRentalsData
        }]
    }
});

/* event listener on drop-down list, when triggered, update chart */
select.addEventListener('change', function() {
    updateChart()
});

/* Update Chart */
function updateChart() {
    var stationRentalsHoursTemp = [];
    var stationRentalName = [];

    var determineHour = selectNumber.options[selectNumber.selectedIndex].innerHTML;
    for (var i = 0; i < stationRentalsHours.length; i++) {
        if (determineHour == stationRentalsHours[i]) {
            stationRentalsHoursTemp.push(stationRentalsData[i])
            stationRentalName.push(stationRentalsLabels[i]);
        }
    }

    /* Updated Chart */
    var ctx3 = document.getElementById("canvas3").getContext("2d");
    var canvas3 = new Chart(ctx3, {
        type: 'line',
        data: {
            labels: stationRentalName,
            datasets: [{
                label: 'Wypożyczenia',
                fillColor: "rgba(220,280,220,0.5)",
                strokeColor: "rgba(220,220,220,1)",
                backgroundColor: "rgba(153,255,51,0.4)",
                data: stationRentalsHoursTemp
            }]
        }
    });
}

最佳答案

您将在与之前相同的 div 中通过 update 函数创建新图表,但为此,您需要在调用 updateChart 函数之前调用 destroy 函数来销毁图表的先前实例。

canvas3.destroy();

解决问题的另一种方法是在调用 updateChart 函数时通过调用更新函数替换数据而不是图表本身(而不是初始化新图表)

function updateChart() {
    var stationRentalsHoursTemp = [];
    var stationRentalName = [];

    var determineHour = selectNumber.options[selectNumber.selectedIndex].innerHTML;
    for (var i = 0; i < stationRentalsHours.length; i++) {
        if (determineHour == stationRentalsHours[i]) {
            stationRentalsHoursTemp.push(stationRentalsData[i])
            stationRentalName.push(stationRentalsLabels[i]);
        }
    }
    // just update the label and dataset not the entire chart
    canvas3.data.labels = stationRentalName;
    canvas3.data.datasets[0].data = stationRentalsHoursTemp;
    canvas3.update();

}

关于Javascript ChartJS 永久更新图表和 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41785679/

相关文章:

javascript - PHP 将 JSON 对象返回给 Javascript [AJAX CALL] 不起作用

javascript - 如何使用 Javascript 从文件夹中获取文件数组

javascript - Canvas - 获取多个 Canvas 叠加中的像素颜色

javascript - 谷歌图表 : “Uncaught (in promise) Error: Unknown header type: 4.7278” error

javascript - 检查字符串是否包含任何没有正则表达式的字符串数组

javascript - 如何使用 javascript 在 InDesign GREP 查找/更改中将 $2 值存储到变量

javascript - 用鼠标旋转固定大小的线

javascript - 在 HTML5 Canvas 上渲染网格

c# - 我在 C# asp.net 中有哪些选项可以在网站上绘制图表?

javascript - 谷歌饼图中的最后一个切片颜色?