如何使用Chart.js为折线图上的数据点添加脉动动画?

问题描述 投票:0回答:1

正如问题中提到的,我正在使用 Charts.js 库。就我而言,我想创建一个折线图。折线图有一些数据点,我想通过给它们提供动画来突出显示它们。

请参阅以下示例来了解我即将提出的问题:

<!DOCTYPE html>
<html lang="en">
<head>
  <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>

<canvas id="myLineChart" width="400" height="200"></canvas>

  <script>
    // Sample data for the line chart
    var data = {
      labels: ['January', 'February', 'March', 'April', 'May'],
      datasets: [{
        label: 'Sample Data',
        data: [10, 25, 18, 30, 15],
        borderColor: 'blue',
        backgroundColor: 'rgba(0, 0, 255, 0.2)',
        fill: true,
      }]
    };

    // Configuration options
    var options = {
      responsive: true,
      maintainAspectRatio: false,
      scales: {
        x: {
          type: 'category',
          labels: data.labels,
        },
      }
    };

    // Get the canvas element
    var ctx = document.getElementById('myLineChart').getContext('2d');

    // Create the line chart
    var myLineChart = new Chart(ctx, {
      type: 'line',
      data: data,
      options: options
    });
  </script>
</body>
</html>

例如,如何为数据点 x = February,y = 25 制作动画?

javascript chart.js
1个回答
0
投票

插件核心 API 提供了一系列可用于执行自定义代码的挂钩。您可以使用

afterInit
挂钩定期更新图表。为此,请使用
setInterval()
函数。

plugins: [{
  afterInit: chart => setInterval(() => { 
    const dataset = chart.data.datasets[0];
    dataset.pointRadius[1] = dataset.pointRadius[1] == rHighlighted ? r : rHighlighted;
    chart.update('none');
  }, 500)
}],

请查看您修改后的代码,看看它是如何工作的。

const r = 3;
const rHighlighted = 8;
new Chart('myLineChart', {
  type: 'line',
  plugins: [{
    afterInit: chart => setInterval(() => { 
      const dataset = chart.data.datasets[0];
      dataset.pointRadius[1] = dataset.pointRadius[1] == rHighlighted ? r : rHighlighted;
      chart.update('none');
    }, 500)
  }],
  data: {
    labels: ['January', 'February', 'March', 'April', 'May'],
    datasets: [{
      label: 'Sample Data',
      data: [10, 25, 18, 30, 15],
      borderColor: ['blue', 'red','blue','blue','blue'],
      pointRadius: [r, r, r, r, r],
      pointHighlightRadius: r,
      backgroundColor: 'rgba(0, 0, 255, 0.2)',
      fill: true,
    }]
  },
  options: {
    maintainAspectRatio: false
  }
});
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<canvas id="myLineChart" width="400" height="200"></canvas>

© www.soinside.com 2019 - 2024. All rights reserved.