// Set Chart Global Variables
let x_values = [0];
let y_values = [0];
let new_number = 0;
let index = 0;

// Intialize The Chart Canvas
let ctx = document.getElementById('chart_canvas').getContext('2d');

// Create New Line Chart
my_chart = new Chart(ctx, {
  type: "line",
  data: {
    labels: [x_values[0]],
    datasets: [{
      backgroundColor: [],
      fill: true,
      pointStyle: "circle",
      label: "Values",
      data: [y_values[0]]
    }]
  }
});

// ------ Local Functions ------

function add() {
  index = x_values.length;
  new_number += 10;

  my_chart.data.labels.push(index);
  x_values.push(index);

  my_chart.data.datasets.forEach((dataset) => {
    dataset.data.push(new_number);

    //The line below might be wrong since it is not changing the background color.
    dataset.backgroundColor.push("#88c0d080");
  });

  my_chart.update();
}

function subtract() {
  index = x_values.length;
  new_number -= 10;

  my_chart.data.labels.push(index);
  x_values.push(index);

  my_chart.data.datasets.forEach((dataset) => {
    dataset.data.push(new_number);

    //This line below might be wrong since it is not changing the background color.
    dataset.backgroundColor.push("#bf616a80");
  });

  my_chart.update();
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>Testing Chart.js Line Chart</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.8.0/chart.min.js" integrity="sha512-sW/w8s4RWTdFFSduOTGtk4isV1+190E/GghVffMA9XczdJ2MDzSzLEubKAs5h0wzgSJOQTRYyaz73L3d6RtJSg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
</head>

<body>
  <button type="button" onclick="add()" id="btnAdd">Add 10</button>
  <button type="button" onclick="subtract()" id="btnSubtract">Subtract 10</button>
  <canvas id="chart_canvas">Your browser does not support the HTML5 canvas tag.</canvas>
</body>

</html>

Expected Behavior:

  • 单击"Add 10"按钮时,需要添加一个带有backgroundColor填充的新点条目

  • 单击"subtract 10"按钮时,需要添加一个新的点条目,填充 colored颜色 为backgroundColor红色(#bf616a80).

Current Behavior:

  • 只更改点背景色,而不是backgroundColor填充色.

非常感谢你的帮助.

推荐答案

添加新数据时,可以使用segment种动态更新的样式:

const options = {
  type: 'line',
  data: {
    labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
    datasets: [{
      label: '# of Votes',
      data: [12, 19, 3, 5, 2, 3],
      borderColor: 'orange',
      fill: true,
      segment: {
        backgroundColor: (ctx) => (ctx.p0.parsed.y > ctx.p1.parsed.y ? 'red' : 'teal')
      }
    }]
  },
  options: {}
}

const ctx = document.getElementById('chartJSContainer').getContext('2d');
const c = new Chart(ctx, options);

document.getElementById('add').addEventListener('click', () => {
  c.data.labels.push(c.data.labels.length);
  c.data.datasets[0].data.push(c.data.datasets[0].data[c.data.datasets[0].data.length - 1] + 10)
  c.update()
});

document.getElementById('subb').addEventListener('click', () => {
  c.data.labels.push(c.data.labels.length);
  c.data.datasets[0].data.push(c.data.datasets[0].data[c.data.datasets[0].data.length - 1] - 10)
  c.update()
});
<body>
  <button id="add">
    Add 10
    </button>
  <button id="subb">
    Subtract 10
    </button>
  <canvas id="chartJSContainer" width="600" height="400"></canvas>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.8.0/chart.js"></script>
</body>

Javascript相关问答推荐

我的YouTube视频没有以html形式显示,以获取免费加密信号

如何使用Paged.js仅渲染特定页面

如何让\w token 在此RegEx中表现得不贪婪?

为什么在集内和集外会产生不同的promise 状态(使用Promise.race)?

使用typeof运算符获取对象值类型-接收字符串而不是数组

在JavaScript中,是否有一种方法可以创建自定义thable,在等待某些代码后自动触发它?

如何避免移动设备中出现虚假调整大小事件?

深嵌套的ng-container元素仍然可以在Angular 布局组件中正确渲染内容吗?

了解Node.js中的EventEums和浏览器中的addEventEums之间的关系

角色 map 集/spritebook动画,用户输入不停止在键上相位器3

我应该绑定不影响状态的函数吗?'

如何从Intl.DateTimeFormat中仅获取时区名称?

第三方包不需要NODE_MODULES文件夹就可以工作吗?

同一类的所有div';S的模式窗口

为什么云存储中的文件不能公开使用?

有没有办法通过使用不同数组中的值进行排序

P5.js中矩形内的圆弧

计算对象数组中属性的滚动增量

在Press Reaction本机和EXPO av上播放单个文件

JSX/React -如何在组件props 中循环遍历数组