@antv/g2plot
Version:
An interactive and responsive charting library
65 lines (58 loc) • 1.7 kB
text/typescript
import { Geometry, Types, View } from '@antv/g2';
import { each, isFunction } from '@antv/util';
import { Options } from '../types';
import { Animation } from '../types/animation';
/**
* 在 Chart 中查找特定 id 的子 View
* @param chart
* @param id
*/
export function findViewById(chart: View, id: string): View {
return chart.views.find((view: View) => view.id === id);
}
/**
* 获取同 view 同一级的所有 views
* @param view 当前 view
* @returns 同一级的 views
* @ignore
*/
export function getViews(view: View): View[] {
const parent = view.parent;
return parent ? parent.views : [];
}
/**
* 获取同 view 同一级的 views,不包括自身
* @param view 当前 view
* @returns 同一级的 views
* @ignore
*/
export function getSiblingViews(view: View): View[] {
return getViews(view).filter((sub) => sub !== view);
}
/**
* 所有的 Geometries 都使用同一动画(各个图形如有区别,自行覆盖)并添加处理动画回调
* @param view View
* @param animation 动画配置
*/
export function addViewAnimation(
view: View,
animation: Options['animation'],
geometries: Geometry<Types.ShapePoint>[] = view.geometries
) {
// 同时设置整个 view 动画选项
if (typeof animation === 'boolean') {
view.animate(animation);
} else {
view.animate(true);
}
// 所有的 Geometry 都使用同一动画(各个图形如有区别,自行覆盖)
each(geometries, (g: Geometry) => {
let animationCfg;
if (isFunction(animation)) {
animationCfg = animation(g.type || g.shapeType, g) || true;
} else {
animationCfg = animation;
}
g.animate(animationCfg as Animation);
});
}