javascript - 分别为数据集制作动画

标签 javascript jquery animation chart.js chart.js2

我试图在折线图中显示两个数据集,但在第一个数据集之后几秒钟对第二个数据集进行动画处理。

我使用的是 CHART.JS 2.6.0 版,我看到很多使用以前版本 (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 实现同样的效果吗?

提前致谢!

最佳答案

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>

关于javascript - 分别为数据集制作动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45385156/

相关文章:

javascript - 如何使用淡入淡出更改背景图像

javascript - SQL 语句是否通过 PhoneGap 的 Web SQL 数据库按顺序执行?

javascript - 使用鼠标拖动 HTML5 Canvas 中的元素

javascript - 如何使 javascript 所做的更改持久化 (rails)

jquery - Tablesorter 服务器端分页 - 不同 Ajax 选项的要求

android - 如何为背景图像的变化设置动画?

javascript - 动画后的 jQuery 延迟

javascript - 如何从维基百科表中获取第一列值的列表?

Delphi 中的 JQuery TypeWatch 功能

javascript - 是否可以在 React Native 中使用 Animated 为 Modal 设置动画?