动画
G2 提供了四种动画场景类型
appear: 初始化时的入场动画enter: 更新时的出现动画update: 更新时的变化动画leave: 销毁时的离开动画
配置概览
ts
// 内置的动画
interface AnimationMap {
appear: 'clip-in' | 'zoom-in' | 'path-in' | 'sacle-in-x' | 'scale-in-y' | 'fan-in' | 'fade-in'
enter: 'clip-in' | 'zoom-in' | 'path-in' | 'sacle-in-x' | 'scale-in-y' | 'fan-in' | 'fade-in'
update: 'fade-in' | 'fan-in'
leave: 'line-width-out' | 'zoom-out' | 'path-out' | 'fade-out'
}
interface AnimateCfg<T> {
readonly animation?: AnimationMap[T]; // 动画执行函数
readonly easing?: string | (data: Datum) => string;; // 动画缓动函数
readonly duration?: number | (data: Datum) => number; // 动画执行时间
readonly delay?: number | (data: Datum) => number;; // 动画延迟时间
readonly callback?: () => any; // 动画执行结束后的回调函数
readonly repeat?: boolean; // 动画是否重复
}
interface AnimateOption {
appear?: AnimateCfg<'appear'> | false | null; // 初始化时的入场动画
enter?: AnimateCfg<'enter'> | false | null; // 更新时新增元素的入场动画
update?: AnimateCfg<'update'> | false | null; // 更新时的变化动画
leave?: AnimateCfg<'leave'> | false | null; // 销毁动画配置
}应用示例
ts
import { Chart } from "@antv/g2";
const data = new Array(10)
.fill(undefined)
.map((v, i) => ({ x: i, y: parseInt("" + Math.random() * 10) }));
const chart = new Chart({
container: "chart",
width: 800,
height: 300,
});
const grom = chart.line().position("x*y").shape("smooth");
grom.animate({
appear: {
animation: "fade-in",
easing: "easeQuadIn", // 动画缓动效果
delay: 1000, // 动画延迟执行时间
duration: 600, // 动画执行时间
},
});
chart.data(data);
chart.render();