javascript - 在 Chart.js 中动态更改图表选项

标签 javascript jquery html class chart.js

我有一个页面,我在其中动态加载不同的图表,这些图表使用 SQL 表中的新数据进行 self 更新。 它们有最大和最小限制,如果它们超出限制,我可以让折线图上的点改变颜色(如果太高或太低,它们变成红色,否则它们是绿色)

遗憾的是,当我尝试更改图表动画选项或 bezierCurves 选项时它没有响应,我查看了 chartjs 页面的文档并且只能找到如何在创建图表时设置这些选项...我需要在根据用户输入制作图表后,在基于间隔的函数上执行此操作...即

我有一组单选按钮: 动画 - 非动画 - bezierCurves - 无 bezierCurves

见图片:)

Charts Page

他们每个人都将他们的可敬变量设置为 true/false,具体取决于他们是否被检查。 然后,每次我更新图表时,我都会尝试将选项更改为变量的值(如果它们与旧的不同)

让我给你一些代码来澄清:)

更新函数:

    // Standard values for all charts
$old_animation = true;
$old_curved = true;

// Start Update funtion for the test chart
setInterval(function update() {

// Set the new options value from the entered user input (on the site)
$curved = $('#curved').val();
    $animation = $('#animation').val();
    if ( $old_animation != $animation || $old_curved != $curved) {

        test_chart.options.animation = $animation;
        test_chart.options.bezierCurves = $curved;

        // Tried the following as well
        //test_chart.animation = $animation;
        //test_chart.options.animation = $animation;


        $old_animation = $animation;
        $old_curved = $curved;
    }

    // Set dataset point 0 value to that of point 1, point 1 to that of point 2 and so on...
    test_chart.datasets[0].points[0].value = test_chart.datasets[0].points[1].value;
    test_chart.datasets[0].points[1].value = test_chart.datasets[0].points[2].value;
    test_chart.datasets[0].points[2].value = test_chart.datasets[0].points[3].value;
    test_chart.datasets[0].points[3].value = test_chart.datasets[0].points[4].value;
    test_chart.datasets[0].points[4].value = test_chart.datasets[0].points[5].value;
    test_chart.datasets[0].points[5].value = test_chart.datasets[0].points[6].value;
    test_chart.scale.xLabels[0] = test_chart.scale.xLabels[1];
    test_chart.scale.xLabels[1] = test_chart.scale.xLabels[2];
    test_chart.scale.xLabels[2] = test_chart.scale.xLabels[3];
    test_chart.scale.xLabels[3] = test_chart.scale.xLabels[4];
    test_chart.scale.xLabels[4] = test_chart.scale.xLabels[5];
    test_chart.scale.xLabels[5] = test_chart.scale.xLabels[6];

    // Get the latest SQL value from the live feed div (hidden) and put that in the last data point
    $live_test = $('#live_test').html();
    $live_test = parseInt($live_test);
    $live_test = $live_test / <?php echo $column_numerator; ?>;

    // Get the last update time for the label of the last data point
    $live_updated = $('#live_updated').html().substr(11);
    test_chart.scale.xLabels[6] = $live_updated;
    test_chart.datasets[0].points[6].value = $live_test;
    console.log('Latest test value = ' + $live_test + ' this has been updated @: ' + $live_updated);




    temperature_chart.update();
}, 4000);

最佳答案

这是不正确的。要更改选项,请使用 chart.options,其中 chart = this.chart

不是更新数据,而是通过 chart 对象来更新数据。 然后使用 chart.update()。这使用点击事件来查看是否只显示一个图例。如果是,则显示数据标签。

legend: {
    display: true,
    onClick: function (e, legendItem) {
        var index = legendItem.datasetIndex;
        var ci = this.chart;
        var meta = ci.getDatasetMeta(index);

        // See controller.isDatasetVisible comment
        meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;
        var cnt = 0;
        for (var i = 0; i < ci.data.datasets.length; i++) {
            if (!ci.data.datasets[i]._meta[0].hidden) {
                cnt++;
            }
        }
        if (cnt === 1) {
            ci.options.plugins.datalabels.display = true;
        }
        else {
            ci.options.plugins.datalabels.display = false;
        }
        ci.update();
    }
}

关于javascript - 在 Chart.js 中动态更改图表选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37347109/

相关文章:

html - 为 div 标签内的背景图片提供 title 属性

javascript - 检查一个div是否为空

javascript - 截取网站截图,仅包含 URL

javascript - 我无法移动我的 div

Javascript:单击调整大小的窗口不起作用

jquery - 奇怪的下拉菜单jquery

javascript - 使用 javascript 从表中删除行

javascript - 如何在 jQuery 中使用 Ajax 请求不同的域

Javascript:无论滚动如何,查找div相对于视口(viewport)的位置

jquery - 触发鼠标进入图像中心