# 动画

Chart.js 默认情况下会对图表进行动画处理。提供了许多选项来配置动画的外观和持续时间。

    # 动画配置

    动画配置包含 3 个键。

    名称 类型 详细信息
    animation 对象 animation
    animations 对象 animations
    transitions 对象 transitions

    这些键可以在以下路径中配置

    • `` - 图表选项
    • datasets[type] - 数据集类型选项
    • overrides[type] - 图表类型选项

    这些路径在 defaults 中对于全局配置有效,在 options 中对于实例配置有效。

    # animation

    默认配置在此定义:core.animations.js

    命名空间:options.animation

    名称 类型 默认 描述
    duration 数字 1000 动画持续的毫秒数。
    easing 字符串 'easeOutQuart' 要使用的缓动函数。 更多...
    delay 数字 未定义 动画开始前的延迟。
    loop 布尔值 未定义 如果设置为 true,则动画会无限循环。

    这些默认值可以在 options.animationdataset.animationtooltip.animation 中被覆盖。这些键也是 可脚本化的

    # animations

    动画选项配置了哪些元素属性是动画的以及如何动画。除了主要的 动画配置 之外,还可以使用以下选项

    命名空间:options.animations[animation]

    名称 类型 默认 描述
    properties 字符串[] key 此配置适用的属性名称。默认为此对象的键名。
    type 字符串 typeof property 属性类型,确定使用的插值器。可能的值:'number''color''boolean'。只有在 'color' 时才真正需要,因为 typeof 不能正确获取该值。
    from number|Color|boolean 未定义 动画的起始值。当 undefined 时使用当前值
    to number|Color|boolean 未定义 动画的结束值。当 undefined 时使用更新后的值
    fn <T>(from: T, to: T, factor: number) => T; 未定义 可选的自定义插值器,而不是使用来自 type 的预定义插值器

    # 默认动画

    名称 选项
    numbers properties ['x', 'y', 'borderWidth', 'radius', 'tension']
    numbers type 'number'
    colors properties ['color', 'borderColor', 'backgroundColor']
    colors type 'color'

    注意

    这些默认动画被大多数数据集控制器覆盖。

    # transitions

    核心过渡是 'active''hide''reset''resize''show'。可以通过将自定义 mode 传递给 update 来使用自定义过渡。过渡扩展了主要的 动画配置动画配置

    # 默认过渡

    命名空间:options.transitions[mode]

    模式 选项 描述
    'active' animation.duration 400 将默认持续时间覆盖为悬停动画的 400 毫秒
    'resize' animation.duration 0 将默认持续时间覆盖为 0 毫秒 (= 无动画) 用于调整大小
    'show' animations.colors { type: 'color', properties: ['borderColor', 'backgroundColor'], from: 'transparent' } 使用图例 / api 显示数据集时,颜色从透明淡入。
    'show' animations.visible { type: 'boolean', duration: 0 } 数据集可见性立即更改为 true,以便从透明的颜色过渡可见。
    'hide' animations.colors { type: 'color', properties: ['borderColor', 'backgroundColor'], to: 'transparent' } 使用图例 / api 隐藏数据集时,颜色会淡出到透明。
    'hide' animations.visible { type: 'boolean', easing: 'easeInExpo' } 可见性在动画的非常晚的阶段更改为 false

    # 禁用动画

    要禁用动画配置,动画节点必须设置为 false,动画模式的例外情况是可以通过将 duration 设置为 0 来禁用。

    chart.options.animation = false; // disables all animations
    chart.options.animations.colors = false; // disables animation defined by the collection of 'colors' properties
    chart.options.animations.x = false; // disables animation defined by the 'x' property
    chart.options.transitions.active.animation.duration = 0; // disables the animation for 'active' mode
    

    # 缓动

    可用选项是

    • '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'

    参见 Robert Penner 的缓动方程 (在新窗口中打开)

    # 动画回调

    动画配置提供回调,这些回调对于将外部绘制与图表动画同步非常有用。回调只能在主要的 动画配置 中设置。

    命名空间:options.animation

    名称 类型 默认 描述
    onProgress 函数 null 动画的每一步都会调用回调。
    onComplete 函数 null 所有动画完成后都会调用回调。

    回调会传递以下对象

    {
      // Chart object
      chart: Chart,
      // Number of animations still in progress
      currentStep: number,
      // `true` for the initial animation of the chart
      initial: boolean,
      // Total number of animations at the start of current animation
      numSteps: number,
    }
    

    以下示例在图表动画期间填充进度条。

    const chart = new Chart(ctx, {
        type: 'line',
        data: data,
        options: {
            animation: {
                onProgress: function(animation) {
                    progress.value = animation.currentStep / animation.numSteps;
                }
            }
        }
    });
    

    可以在 此进度条示例中 找到这些回调的另一个使用示例,该示例显示了一个显示动画进行程度的进度条。

    最后更新: 2024 年 5 月 17 日 下午 12:33:38