【问题标题】:Animate datasets separately分别为数据集设置动画
【发布时间】:2017-07-29 04:09:11
【问题描述】:

我正在尝试在折线图中显示两个数据集,但在第一个数据集几秒后为第二个数据集设置动画。

我使用的是 2.6.0 版的 CHART.JS,我看到很多使用以前版本 (1.xx) 的示例,但由于 API 已更改,因此所有示例都无法在这个新版本中运行。

我尝试了文档 (see here),但对于新手来说确实很差,因为 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;
    }
  }
});

您可以看到此代码在运行here,但此示例在 2.6 版中不起作用,即使它适应新语法也是如此。

那么,你能帮我用 Chart.JS 2.6 达到同样的效果吗?

提前致谢!

【问题讨论】:

    标签: javascript jquery animation chart.js chart.js2


    【解决方案1】:

    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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多