Animate

概述

G2 给每个 Geom 都提供了一套默认的动画,用户在需要使用动画时,打开动画的控制开关即可。同时,G2 给用户提供了最大限度的动画控制:首先,用户可以对默认动画的动画时间和动画效果进行配置;其次,G2 提供了常用动画库供用户选择使用;最后,用户可以自定义 Geom 的动画,以满足特殊场景的需求。

动画的控制开关

动画默认开启,配置动画的开关有三种方法:

  • Global.animate 全局配置
  1. var Global = G2.Global
  2. Global.animate = false;
  • 实例化 chart 时配置属性
  1. var chart = new G2.Chart({
  2. id: 'c1',
  3. animate: false
  4. });
  • 调用 chart 对象的 animate 方法
  1. chart.animate(false);

动画配置

配置接口 Geom.animate()

animate(cfg)

参数

  • cfg: Object

动画的配置项,支持的配置属性如下:

  1. {
  2. appear: {
  3. // 初始入场动画配置
  4. }
  5. enter: {
  6. // 更新时出现动画配置
  7. },
  8. leave: {
  9. // 更新时销毁动画配置
  10. },
  11. update: {
  12. // 更新时改变动画配置
  13. }
  14. });

四个场景的配置项如下:

  • animation: 动画名称{string}
  • duration: 动画时间{Number},单位毫秒(ms)
  • easing: 缓动函数{string}
  • delay: 动画延时{Number},单位毫秒(ms)

duration、easing 和 delay 均支持回调函数,且参数相同

  1. .animate({
  2. appear: {
  3. delay: function(index, id) { //index:图形的序号,id:图形的唯一识别码
  4. return index * 30;
  5. }
  6. }
  7. })

easing 的可选类型见 G2 canvas API

动画库

G2 提供了两种动画:

  • 整体动画:画布中所有 shape (图形)组成的 group (图形组)的整体动画,性能较高,但使用场景有限;
  • 个体动画:画布中某个 shape (图形)的个体动画,更为灵活,但数据量巨大时性能较低。
名称类型支持的场景备注效果
groupWavesgroupappear水平平铺Animate - 图1
groupWavehgroupappear垂直平铺Animate - 图2
groupCirclegroupappear放射平铺Animate - 图3
groupAnglegroupappear环形平铺Animate - 图4
groupScaleXgroupappear延 X 轴放大Animate - 图5
groupScaleYgroupappear延 Y 轴放大Animate - 图6
groupScaleXYgroupappear双向放大Animate - 图7
fadeInshapeappear/enter出现Animate - 图8
fadeOutshapeleave消失Animate - 图9
zoomInshapeappear/enter放大Animate - 图10
zoomOutshapeleave缩小Animate - 图11
scaleInXshapeappear/enter延 X 轴放大Animate - 图12
scaleInYshapeappear/enter延 Y 轴放大Animate - 图13
  1. chart.interval().position('x*y').animate({
  2. enter:{
  3. animation: 'fadeIn',
  4. easing: 'easeInQuart'
  5. },
  6. update: {
  7. duration: 2000
  8. }
  9. });

自定义动画:

配置接口 Animate.registAnimation()

  1. var Animate = G2.Animate;
  2. Animate.registAnimation(animationType, animationName, animationFun);

参数:

  • animationType: String

动画场景类型,支持四种场景:

  • appear: 初始化时的入场动画
  • enter: 更新时的出现动画
  • update: 更新时的变化动画
  • leave: 更新时的销毁动画
    • animationName: String

动画名

  • animationFun: Function

自定义动画实现

  • appear/enter/leave
  1. var animationFun = function(/* shape, animateCfg */){
  2. // 自定义动画实现
  3. });
  • update
  1. var animationFun = function(/* shape1, shape2, animateCfg */){
  2. // 自定义动画实现
  3. });

说明:

  • shape1 是缓存图形对象,包含原图形的属性和数据
  • shape/shape2 是真实图形对象,其类型、通用属性和通用方法见 G2 canvas API
  • animateCfg是动画配置,包括:duration (动画时间)、easing (缓动函数)、delay(动画延时)
  1. var Canvas = require('@ali/g-canvas');
  2. var Vector3 = Canvas.Matrix.Vector3;
  3. // 注册更新时的销毁动画
  4. Animate.registAnimation('leave', 'myAnimation', function(shape, animateCfg){
  5. var box = shape.getBBox(); // 获取图形的包围盒
  6. var minX = box.minX;
  7. var minY = box.minY;
  8. var maxX = box.maxX;
  9. var maxY = box.maxY;
  10. var x = (minX + maxX) / 2;
  11. var y = (minY + maxY) / 2;
  12. // 底层动画接口
  13. shape.animate({
  14. transform: [
  15. ['t', -x, -y],
  16. ['s', 0.1, 0.1],
  17. ['t', x, y]
  18. ],
  19. destroy: true,
  20. animateCfg.delay,
  21. }, animateCfg.duration, animateCfg.easing);
  22. });

自定义动画的详细流程见自定义动画教程