ChartJS 动画

  • 配置

    Chart.js 提供了许多选项来配置动画的外观以及动画时间。
    Chart.js 开箱即用动画图表。提供了许多选项来配置动画的外观以及动画时间。
    名称 类型 默认值 描述
    duration Number 1000 动画所需的毫秒数
    easing String 'easeOutQuart' Easing
    onProgress Function null 每一步动画的回调
    onComplete Function null 动画结束后回调
  • Easing

    可用选项:
    • 'linear'
    • 'easeInQuad'
    • 'easeOutQuad'
    • 'easeInOutQuad'
    • 'easeInCubic'
    • 'easeOutCubic'
    • 'easeInOutCubic'
    • 'easeInQuart'
    • 'easeOutQuart'
    • 'easeInOutQuart'
    • 'easeInQuint'
    • 'easeOutQuint'
    • 'easeInOutQuint'
    • 'easeInSine'
    • 'easeOutSine'
    • 'easeInOutSine'
    • 'easeInExpo'
    • 'easeOutExpo'
    • 'easeInOutExpo'
    • 'easeInCirc'
    • 'easeOutCirc'
    • 'easeInOutCirc'
    • 'easeInElastic'
    • 'easeOutElastic'
    • 'easeInOutElastic'
    • 'easeInBack'
    • 'easeOutBack'
    • 'easeInOutBack'
    • 'easeInBounce'
    • 'easeOutBounce'
    • 'easeInOutBounce'
  • 配置

    onProgress 和 onComplete 回调对于外部操作同步到图表动画,回调传递一个 Chart.Animation 实例:
    {
      // Chart 对象
      chart: Chart,
    
      // 当前动画帧数
      currentStep: Number,
    
      // 动画帧数
      numSteps: Number,
    
      // easing动画使用
      easing: String,
    
      // 绘制图表
      render: Function,
    
      // 使用回调
      onAnimationProgress: Function,
    
      // 使用回调
      onAnimationComplete: Function
    }
    以下示例在图表动画期间填充进度条。
     var myChart = new Chart(ctx, {
      type: 'line',
      data: {
        labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
        datasets: [{
          label: '# of Votes',
          data: [12, 20, 3, 5, 2, 3],
          backgroundColor: [
            'rgba(255, 99, 132, 0.2)',
            'rgba(54, 162, 235, 0.2)',
            'rgba(255, 206, 86, 0.2)',
            'rgba(75, 192, 192, 0.2)',
            'rgba(153, 102, 255, 0.2)',
            'rgba(255, 159, 64, 0.2)'
          ],
          borderColor: [
            'rgba(255, 99, 132, 1)',
            'rgba(54, 162, 235, 1)',
            'rgba(255, 206, 86, 1)',
            'rgba(75, 192, 192, 1)',
            'rgba(153, 102, 255, 1)',
            'rgba(255, 159, 64, 1)'
          ],
          borderWidth: 1
        }]
      },
      options: {
        hover: {
          animationDuration: 0  // 防止鼠标移上去,数字闪烁
        },
        animation: {           // 这部分是数值显示的功能实现
          onProgress: function () {
            var chartInstance = this.chart,
            ctx = chartInstance.ctx;
            // 以下属于canvas的属性(font、fillStyle、textAlign...)
            ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
            ctx.fillStyle = "black";
            ctx.textAlign = 'center';
            ctx.textBaseline = 'bottom';
            this.data.datasets.forEach(function (dataset, i) {
                var meta = chartInstance.controller.getDatasetMeta(i);
                meta.data.forEach(function (bar, index) {
                    var data = dataset.data[index];
                    ctx.fillText(data, bar._model.x, bar._model.y-5);
                });
            });
          }
        }
      }
    });
    尝试一下