diff --git a/packages/vchart/src/animation/interface.ts b/packages/vchart/src/animation/interface.ts index 45d8a32ad2..f83ebfde22 100644 --- a/packages/vchart/src/animation/interface.ts +++ b/packages/vchart/src/animation/interface.ts @@ -92,6 +92,8 @@ export interface CommonAnimationConfigItem { options?: GraphicFunctionValueType; /** 动画执行相关控制配置项 */ controlOptions?: IAnimationControlOptions; + /** 该动画是否需要忽略子图元 */ + selfOnly?: boolean; } export interface TypeAnimationConfig extends CommonAnimationConfigItem { diff --git a/packages/vchart/src/mark/base/base-mark.ts b/packages/vchart/src/mark/base/base-mark.ts index 30f87e32b3..183906121f 100644 --- a/packages/vchart/src/mark/base/base-mark.ts +++ b/packages/vchart/src/mark/base/base-mark.ts @@ -189,25 +189,36 @@ export class BaseMark extends GrammarItem implements IMar return this._animationConfig; } setAnimationConfig(config: Partial) { + // group mark 动画默认只挂到自己 + const defaultPrams = this.type === 'group' ? { selfOnly: true } : {}; + // 封装options,批量添加一些默认参数 - const animationConfig = { ...config }; - Object.keys(animationConfig).forEach(key => { - const value = (animationConfig as any)[key]; + const animationConfig: Partial = {}; + + Object.keys(config).forEach(key => { + const value = (config as any)[key]; if (isArray(value)) { - value.forEach(item => { + (animationConfig as any)[key] = value.map(item => { const options = item!.options ?? {}; - item.options = (...args: any[]) => { - const _options = typeof options === 'function' ? options(...args) : options; - return { - ..._options, - layoutRect: (this.model as any).getLayoutRect?.() - }; + + return { + ...defaultPrams, + ...item, + options: (...args: any[]) => { + const _options = typeof options === 'function' ? options(...args) : options; + return { + ..._options, + layoutRect: (this.model as any).getLayoutRect?.() + }; + } }; }); + } else { + (animationConfig as any)[key] = { + ...defaultPrams, + ...(config as any)[key] + }; } - // if (isNil(animationConfig[key])) { - // animationConfig[key] = {}; - // } }); this._animationConfig = animationConfig; }