分别对数据集进行动画处理

3
我想在一条折线图中展示两个数据集,但要在第一个数据集之后几秒钟才能动画显示第二个数据集。 我正在使用CHART.JS版本2.6.0,我看到了很多使用先前版本(1.xx)的样本,但由于API已更改,所有这些样本都无法在新版本中运行。 我尝试了文档(请看这里),但对于新手来说真的非常简陋,因为ANIMATION事件文档仅有一个基本示例。 我想做的基本上是这个:
var ctx = document.getElementById("myChart").getContext("2d");

var data = {
  labels: ["January", "February", "March", "April", "May", "June", "July"],
  datasets: [{
      label: "My First dataset",
      fillColor: "rgba(220,220,220,0.2)",
      data: [65, 0, 80, 81, 56, 85, 40]
    },
    {
      label: "My Second dataset",
      fillColor: "rgba(151,187,205,0.2)",
      data: [0, 0, 0, 0, 0, 0, 0]
    }
  ]
};

var data2 = [28, 48, 40, 19, 86, 27, 90];

var done = false;
var myLineChart = new Chart(ctx).Line(data, {
  animationEasing: 'linear',
  onAnimationComplete: function () {
    if (!done) {
      myLineChart.datasets[1].points.forEach(function (point, i) {
        point.value = data2[i];
      });
      myLineChart.update();
      done = true;
    }
  }
});

您可以在这里看到此代码的运行情况,但即使将其适应新语法,此示例在2.6版本中也无法正常工作。

所以,请问您能否帮我使用Chart.JS 2.6实现相同的效果呢?

提前感谢!

1个回答

2

ChartJS v2.6 解决方案

var done = false;
var data2 = [28, 48, 40, 19, 86, 27, 90];

var ctx = document.getElementById("myChart").getContext("2d");
var myLineChart = new Chart(ctx, {
   type: 'line',
   data: {
      labels: ["January", "February", "March", "April", "May", "June", "July"],
      datasets: [{
         label: "My First dataset",
         backgroundColor: "rgba(220,220,220,0.2)",
         borderColor: "rgba(220,220,220,1)",
         pointBackgroundColor: "rgba(220,220,220,1)",
         pointBorderColor: "#fff",
         pointHoverBackgroundColor: "#fff",
         pointHoverBorderColor: "rgba(220,220,220,1)",
         data: [65, 0, 80, 81, 56, 85, 40]
      }, {
         label: "My Second dataset",
         backgroundColor: "rgba(151,187,205,0.2)",
         borderColor: "rgba(151,187,205,1)",
         pointBackgroundColor: "rgba(151,187,205,1)",
         pointBorderColor: "#fff",
         pointHoverBackgroundColor: "#fff",
         pointHoverBorderColor: "rgba(151,187,205,1)",
         data: [0, 0, 0, 0, 0, 0, 0]
      }]
   },
   options: {
      animation: {
         easing: 'linear',
         onComplete: function(e, i) {
            if (!done) {
               this.data.datasets[1].data = data2;
               /* we need to update chart within setTimeout,
                as there seems to be an issue when updating the chart 
                at first animation onComplete function call */
               setTimeout(function() {
                  this.update();
               }.bind(this), 100);
               done = true;
            }
         }
      }
   }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<canvas id="myChart" height="300" width="800"></canvas>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接