@visactor/vrender-animate 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/custom/fromTo.js +4 -4
- package/cjs/custom/fromTo.js.map +1 -1
- package/cjs/executor/animate-executor.js +4 -2
- package/cjs/executor/animate-executor.js.map +1 -1
- package/cjs/interpolate/store.d.ts +2 -0
- package/cjs/interpolate/store.js +6 -0
- package/cjs/interpolate/store.js.map +1 -1
- package/dist/index.es.js +16 -3
- package/es/custom/fromTo.js +4 -4
- package/es/custom/fromTo.js.map +1 -1
- package/es/executor/animate-executor.js +4 -1
- package/es/executor/animate-executor.js.map +1 -1
- package/es/interpolate/store.d.ts +2 -0
- package/es/interpolate/store.js +6 -0
- package/es/interpolate/store.js.map +1 -1
- package/package.json +4 -4
package/cjs/custom/fromTo.js
CHANGED
|
@@ -12,11 +12,11 @@ class FromTo extends custom_animate_1.ACustomAnimate {
|
|
|
12
12
|
}
|
|
13
13
|
onBind() {
|
|
14
14
|
var _a, _b;
|
|
15
|
-
super.onBind()
|
|
15
|
+
super.onBind(), Object.keys(this.from).forEach((key => {
|
|
16
|
+
null == this.props[key] && (this.props[key] = this.target.getGraphicAttribute(key));
|
|
17
|
+
}));
|
|
16
18
|
const finalAttribute = this.target.getFinalAttribute();
|
|
17
|
-
|
|
18
|
-
null == this.props[key] && (this.props[key] = finalAttribute[key]);
|
|
19
|
-
})), "appear" === (null === (_a = this.target.context) || void 0 === _a ? void 0 : _a.animationState) && finalAttribute && this.target.setAttributes(finalAttribute),
|
|
19
|
+
"appear" === (null === (_a = this.target.context) || void 0 === _a ? void 0 : _a.animationState) && finalAttribute && this.target.setAttributes(finalAttribute),
|
|
20
20
|
!1 !== (null === (_b = this.params.controlOptions) || void 0 === _b ? void 0 : _b.immediatelyApply) && this.target.setAttributes(this.from);
|
|
21
21
|
}
|
|
22
22
|
onFirstRun() {
|
package/cjs/custom/fromTo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/custom/fromTo.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAElD,MAAa,MAAO,SAAQ,+BAAsC;IAKhE,YAAY,IAAU,EAAE,EAAQ,EAAE,QAAgB,EAAE,MAAkB,EAAE,MAAY;QAClF,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM;;QACJ,KAAK,CAAC,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/custom/fromTo.ts"],"names":[],"mappings":"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","file":"fromTo.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport { ACustomAnimate } from './custom-animate';\n\nexport class FromTo extends ACustomAnimate<Record<string, number>> {\n declare valid: boolean;\n\n keys: string[];\n\n constructor(from: null, to: null, duration: number, easing: EasingType, params?: any) {\n super(from, to, duration, easing, params);\n this.from = from ?? {};\n }\n\n onBind(): void {\n super.onBind();\n\n // 如果存在from,不存在to,那么需要设置给props\n Object.keys(this.from).forEach(key => {\n if (this.props[key] == null) {\n this.props[key] = this.target.getGraphicAttribute(key);\n }\n });\n\n const finalAttribute = this.target.getFinalAttribute();\n // 如果入场动画,那么需要设置属性\n if (this.target.context?.animationState === 'appear') {\n if (finalAttribute) {\n this.target.setAttributes(finalAttribute);\n }\n }\n if (this.params.controlOptions?.immediatelyApply !== false) {\n this.target.setAttributes(this.from);\n }\n }\n\n onFirstRun(): void {\n // 获取上一步的属性值作为起始值\n this.from = { ...this.getLastProps(), ...this.from };\n const startProps = this.animate.getStartProps();\n this.propKeys &&\n this.propKeys.forEach(key => {\n this.from[key] = this.from[key] ?? startProps[key];\n });\n // TODO:比较hack\n // 如果是入场动画,那么还需要设置属性\n // if (this.target.context?.animationState === 'appear') {\n // // 用于入场的时候设置属性(因为有动画的时候VChart不会再设置属性了)\n // const finalAttribute = this.target.getFinalAttribute();\n // this.target.setAttributes(finalAttribute);\n // }\n this.target.setAttributes(this.from);\n }\n\n /**\n * 更新执行的时候调用\n * 如果跳帧了就不一定会执行\n */\n update(end: boolean, ratio: number, out: Record<string, any>): void {\n // TODO 需要修复,只有在开始的时候才调用\n this.onStart();\n if (!this.props || !this.propKeys) {\n return;\n }\n // 应用缓动函数\n const easedRatio = this.easing(ratio);\n this.animate.interpolateUpdateFunction\n ? this.animate.interpolateUpdateFunction(this.from, this.props, easedRatio, this, this.target)\n : this.interpolateUpdateFunctions.forEach((func, index) => {\n // 如果这个属性被屏蔽了,直接跳过\n if (!this.animate.validAttr(this.propKeys[index])) {\n return;\n }\n const key = this.propKeys[index];\n const fromValue = this.from[key];\n const toValue = this.props[key];\n func(key, fromValue, toValue, easedRatio, this, this.target);\n });\n this.onUpdate(end, easedRatio, out);\n this.syncAttributeUpdate();\n }\n}\n"]}
|
|
@@ -136,8 +136,10 @@ class AnimateExecutor {
|
|
|
136
136
|
_handleRunAnimate(animate, custom, customType, from, props, duration, easing, customParameters, controlOptions, options, type, graphic) {
|
|
137
137
|
var _a, _b, _c, _d;
|
|
138
138
|
if (custom && customType) {
|
|
139
|
-
const customParams = this.resolveValue(customParameters, graphic, {
|
|
140
|
-
|
|
139
|
+
const customParams = this.resolveValue(customParameters, graphic, {
|
|
140
|
+
width: graphic.stage.width,
|
|
141
|
+
height: graphic.stage.height
|
|
142
|
+
}), objOptions = (0, vutils_1.isFunction)(options) ? options.call(null, null !== (_b = customParams && (null === (_a = customParams.data) || void 0 === _a ? void 0 : _a[0])) && void 0 !== _b ? _b : null === (_d = null === (_c = graphic.context) || void 0 === _c ? void 0 : _c.data) || void 0 === _d ? void 0 : _d[0], graphic, customParams) : options;
|
|
141
143
|
customParams.options = objOptions, customParams.controlOptions = controlOptions,
|
|
142
144
|
1 === customType ? this.createCustomAnimation(animate, custom, from, props, duration, easing, customParams) : 2 === customType && this.createCustomInterpolatorAnimation(animate, custom, props, duration, easing, customParams);
|
|
143
145
|
} else "to" === type ? animate.to(props, duration, easing) : "from" === type && animate.from(props, duration, easing);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/executor/animate-executor.ts"],"names":[],"mappings":"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","file":"animate-executor.js","sourcesContent":["import type { IGraphic, EasingType, IAnimate } from '@visactor/vrender-core';\nimport type {\n IAnimationConfig,\n IAnimationTimeline,\n IAnimationTypeConfig,\n MarkFunctionCallback,\n MarkFunctionValueType,\n IAnimationTimeSlice,\n IAnimationChannelAttrs,\n IAnimationChannelAttributes,\n IAnimationCustomConstructor,\n IAnimationChannelInterpolator\n} from './executor';\nimport { cloneDeep, isArray, isFunction } from '@visactor/vutils';\n\ninterface IAnimateExecutor {\n execute: (params: IAnimationConfig) => void;\n executeItem: (params: IAnimationConfig, graphic: IGraphic, index?: number) => IAnimate[];\n onStart: (cb?: () => void) => void;\n onEnd: (cb?: () => void) => void;\n}\n\nexport class AnimateExecutor implements IAnimateExecutor {\n static builtInAnimateMap: Record<string, IAnimationCustomConstructor> = {};\n\n static registerBuiltInAnimate(name: string, animate: IAnimationCustomConstructor) {\n AnimateExecutor.builtInAnimateMap[name] = animate;\n }\n\n declare _target: IGraphic;\n\n // 所有动画实例\n private _animates: IAnimate[] = [];\n\n // 动画开始回调\n private _startCallbacks: (() => void)[] = [];\n // 动画结束回调\n private _endCallbacks: (() => void)[] = [];\n\n // 是否已经开始动画\n private _started: boolean = false;\n\n // 当前正在运行的动画数量\n private _activeCount: number = 0;\n\n constructor(target: IGraphic) {\n this._target = target;\n }\n\n /**\n * 注册一个回调,当动画开始时调用\n */\n onStart(cb?: () => void): void {\n if (cb) {\n this._startCallbacks.push(cb);\n\n // 如果动画已经开始,立即调用回调\n if (this._started && this._activeCount > 0) {\n cb();\n }\n } else {\n this._startCallbacks.forEach(cb => {\n cb();\n });\n }\n }\n\n /**\n * 注册一个回调,当所有动画结束时调用\n */\n onEnd(cb?: () => void): void {\n if (cb) {\n this._endCallbacks.push(cb);\n } else {\n this._endCallbacks.forEach(cb => {\n cb();\n });\n }\n }\n\n /**\n * 跟踪动画并附加生命周期钩子\n */\n private _trackAnimation(animate: IAnimate): void {\n this._animates.push(animate);\n this._activeCount++;\n\n // 如果这是第一个正在运行的动画,触发onStart回调\n if (this._activeCount === 1 && !this._started) {\n this._started = true;\n this.onStart();\n }\n\n // 处理动画完成\n animate.onEnd(() => {\n this._activeCount--;\n\n // 从跟踪的动画中移除\n const index = this._animates.indexOf(animate);\n if (index >= 0) {\n this._animates.splice(index, 1);\n }\n\n // 如果所有动画都已完成,触发onEnd回调\n if (this._activeCount === 0 && this._started) {\n this._started = false;\n this.onEnd();\n }\n });\n }\n\n parseParams(params: IAnimationConfig, isTimeline: boolean, child?: IGraphic): IAnimationConfig {\n const totalTime = this.resolveValue(params.totalTime, undefined, undefined);\n const startTime = this.resolveValue(params.startTime, undefined, 0);\n\n // execute只在mark层面调用,所以性能影响可以忽略\n // TODO 存在性能问题,如果后续调用频繁,需要重新修改\n const parsedParams: Record<string, any> = { ...params };\n parsedParams.oneByOneDelay = 0;\n parsedParams.startTime = startTime;\n parsedParams.totalTime = totalTime;\n\n const oneByOne = this.resolveValue(params.oneByOne, child, false);\n\n if (isTimeline) {\n const timeSlices = (parsedParams as IAnimationTimeline).timeSlices;\n if (!isArray(timeSlices)) {\n (parsedParams as IAnimationTimeline).timeSlices = [timeSlices];\n }\n let sliceTime = 0;\n ((parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]) = (\n (parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]\n ).map(slice => {\n const delay = this.resolveValue(slice.delay, child, 0);\n const delayAfter = this.resolveValue(slice.delayAfter, child, 0);\n const duration = this.resolveValue(slice.duration, child, 300);\n sliceTime += delay + duration + delayAfter;\n return {\n ...slice,\n delay,\n delayAfter,\n duration\n };\n });\n let oneByOneDelay = 0;\n if (oneByOne) {\n oneByOneDelay = typeof oneByOne === 'number' ? (oneByOne as number) : oneByOne ? sliceTime : 0;\n }\n parsedParams.oneByOneDelay = oneByOneDelay;\n\n let scale = 1;\n if (totalTime) {\n const _totalTime = sliceTime + oneByOneDelay * (this._target.count - 2);\n scale = totalTime ? totalTime / _totalTime : 1;\n }\n ((parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]) = (\n (parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]\n ).map(slice => {\n let effects = slice.effects;\n if (!Array.isArray(effects)) {\n effects = [effects];\n }\n return {\n ...slice,\n delay: (slice.delay as number) * scale,\n delayAfter: (slice.delayAfter as number) * scale,\n duration: (slice.duration as number) * scale,\n effects: effects.map(effect => {\n const custom = effect.custom ?? AnimateExecutor.builtInAnimateMap[(effect.type as any) ?? 'fromTo'];\n const customType =\n custom && isFunction(custom) ? (/^class\\s/.test(Function.prototype.toString.call(custom)) ? 1 : 2) : 0;\n return {\n ...effect,\n custom,\n customType\n };\n })\n };\n });\n parsedParams.oneByOneDelay = oneByOneDelay * scale;\n (parsedParams as IAnimationTimeline).startTime = startTime * scale;\n } else {\n const delay = this.resolveValue((params as IAnimationTypeConfig).delay, child, 0);\n const delayAfter = this.resolveValue((params as IAnimationTypeConfig).delayAfter, child, 0);\n const duration = this.resolveValue((params as IAnimationTypeConfig).duration, child, 300);\n const loopTime = delay + delayAfter + duration;\n\n let oneByOneDelay = 0;\n if (oneByOne) {\n oneByOneDelay = typeof oneByOne === 'number' ? (oneByOne as number) : oneByOne ? loopTime : 0;\n }\n parsedParams.oneByOneDelay = oneByOneDelay;\n parsedParams.custom =\n (params as IAnimationTypeConfig).custom ??\n AnimateExecutor.builtInAnimateMap[(params as IAnimationTypeConfig).type ?? 'fromTo'];\n\n const customType =\n parsedParams.custom && isFunction(parsedParams.custom)\n ? /^class\\s/.test(Function.prototype.toString.call(parsedParams.custom))\n ? 1\n : 2\n : 0;\n parsedParams.customType = customType;\n\n if (totalTime) {\n const _totalTime = delay + delayAfter + duration + oneByOneDelay * (this._target.count - 2);\n const scale = totalTime ? totalTime / _totalTime : 1;\n parsedParams.delay = delay * scale;\n parsedParams.delayAfter = delayAfter * scale;\n parsedParams.duration = duration * scale;\n parsedParams.oneByOneDelay = oneByOneDelay * scale;\n (parsedParams as IAnimationTypeConfig).startTime = startTime;\n }\n }\n\n return parsedParams;\n }\n\n execute(params: IAnimationConfig | IAnimationConfig[]) {\n if (Array.isArray(params)) {\n params.forEach(param => this._execute(param));\n } else {\n this._execute(params);\n }\n }\n\n /**\n * 执行动画,针对一组元素\n */\n _execute(params: IAnimationConfig) {\n if (params.selfOnly) {\n return this._executeItem(params, this._target, 0, 1);\n }\n\n // 判断是否为timeline配置\n const isTimeline = 'timeSlices' in params;\n\n // 筛选符合条件的子图元\n let filteredChildren: IGraphic[];\n\n // 如果设置了partitioner,则进行筛选\n if (isTimeline && params.partitioner) {\n filteredChildren = (filteredChildren ?? (this._target.getChildren() as IGraphic[])).filter(child => {\n return (params as IAnimationTimeline).partitioner((child.context as any)?.data?.[0], child, {});\n });\n }\n\n // 如果需要排序,则进行排序\n if (isTimeline && (params as IAnimationTimeline).sort) {\n filteredChildren = filteredChildren ?? (this._target.getChildren() as IGraphic[]);\n filteredChildren.sort((a, b) => {\n return (params as IAnimationTimeline).sort(\n (a.context as any)?.data?.[0],\n (b.context as any)?.data?.[0],\n a,\n b,\n {}\n );\n });\n }\n\n //\n\n const cb = isTimeline\n ? (child: IGraphic, index: number, count: number) => {\n const parsedParams = this.parseParams(params, isTimeline, child);\n // 执行单个图元的timeline动画\n const animate = this.executeTimelineItem(parsedParams as IAnimationTimeline, child, index, count);\n if (animate) {\n this._trackAnimation(animate);\n }\n }\n : (child: IGraphic, index: number, count: number) => {\n const parsedParams = this.parseParams(params, isTimeline, child);\n // 执行单个图元的config动画\n const animate = this.executeTypeConfigItem(parsedParams as IAnimationTypeConfig, child, index, count);\n if (animate) {\n this._trackAnimation(animate);\n }\n };\n\n // 执行每个图元的动画\n if (filteredChildren) {\n filteredChildren.forEach((child, index) => cb(child, index, filteredChildren.length));\n } else if (this._target.count <= 1) {\n cb(this._target, 0, 1);\n } else {\n this._target.forEachChildren((child, index) => cb(child as IGraphic, index, this._target.count - 1));\n }\n\n return;\n }\n\n /**\n * 执行 TypeConfig 类型的动画\n */\n private executeTypeConfigItem(\n params: IAnimationTypeConfig,\n graphic: IGraphic,\n index: number,\n count: number\n ): IAnimate {\n const {\n type = 'fromTo',\n channel,\n customParameters,\n easing = 'linear',\n delay = 0,\n delayAfter = 0,\n duration = 300,\n startTime = 0,\n oneByOneDelay = 0,\n loop,\n bounce,\n priority = 0,\n options,\n custom,\n customType, // 0: undefined, 1: class, 2: function\n controlOptions\n } = params as any;\n\n // 创建动画实例\n const animate = graphic.animate() as unknown as IAnimate;\n animate.priority = priority;\n\n const delayValue = isFunction(delay) ? delay(graphic.context?.data?.[0], graphic, {}) : delay;\n\n // 如果设置了indexKey,则使用indexKey作为index\n const datum = graphic.context?.data?.[0];\n const indexKey = graphic.context?.indexKey;\n if (datum && indexKey) {\n index = datum[indexKey] ?? index;\n }\n\n // 设置开始时间\n animate.startAt(startTime as number);\n const wait = index * oneByOneDelay + delayValue;\n wait > 0 && animate.wait(wait);\n\n // 放到startAt中,否则label无法确定主图元何时开始\n // // 添加延迟\n // if (delayValue > 0) {\n // animate.wait(delayValue);\n // }\n\n // 根据 channel 配置创建属性对象\n // 根据 channel 配置创建属性对象\n let parsedFromProps = null;\n let props = params.to;\n let from = params.from;\n if (!props) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n props = parsedFromProps.props;\n }\n if (!from) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n from = parsedFromProps.from;\n }\n\n this._handleRunAnimate(\n animate,\n custom,\n customType,\n from,\n props,\n duration as number,\n easing,\n customParameters,\n controlOptions,\n options,\n type,\n graphic\n );\n\n let totalDelay = 0;\n if (oneByOneDelay) {\n totalDelay = oneByOneDelay * (count - index - 1);\n }\n\n // 添加后延迟\n const delayAfterValue = isFunction(delayAfter) ? delayAfter(graphic.context?.data?.[0], graphic, {}) : delayAfter;\n if (delayAfterValue > 0) {\n totalDelay += delayAfterValue as number;\n }\n\n if (totalDelay > 0) {\n animate.wait(totalDelay);\n }\n\n // 设置循环\n if (loop && (loop as number) > 0) {\n animate.loop(loop as number);\n }\n\n // 设置反弹\n if (bounce) {\n animate.bounce(true);\n }\n\n return animate;\n }\n\n private _handleRunAnimate(\n animate: IAnimate,\n custom: IAnimationCustomConstructor | IAnimationChannelInterpolator,\n customType: number, // 0: undefined, 1: class, 2: function\n from: Record<string, any> | null,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParameters: any,\n controlOptions: any,\n options: any,\n type: string,\n graphic: IGraphic\n ) {\n // 处理自定义动画\n if (custom && customType) {\n const customParams = this.resolveValue(customParameters, graphic, {});\n const objOptions = isFunction(options)\n ? options.call(\n null,\n (customParams && customParams.data?.[0]) ?? graphic.context?.data?.[0],\n graphic,\n customParams\n )\n : options;\n customParams.options = objOptions;\n customParams.controlOptions = controlOptions;\n if (customType === 1) {\n // 自定义动画构造器 - 创建自定义动画类\n this.createCustomAnimation(\n animate,\n custom as IAnimationCustomConstructor,\n from,\n props,\n duration as number,\n easing,\n customParams\n );\n } else if (customType === 2) {\n // 自定义插值器 - 创建自定义插值动画\n this.createCustomInterpolatorAnimation(\n animate,\n custom as IAnimationChannelInterpolator,\n props,\n duration as number,\n easing,\n customParams\n );\n }\n } else if (type === 'to') {\n animate.to(props, duration as number, easing);\n } else if (type === 'from') {\n animate.from(props, duration as number, easing);\n }\n }\n\n /**\n * 执行 Timeline 类型的动画\n */\n private executeTimelineItem(params: IAnimationTimeline, graphic: IGraphic, index: number, count: number): IAnimate {\n const { timeSlices, startTime = 0, loop, bounce, oneByOneDelay, priority, controlOptions } = params as any;\n\n // 如果设置了indexKey,则使用indexKey作为index\n const datum = graphic.context?.data?.[0];\n const indexKey = graphic.context?.indexKey;\n if (datum && indexKey) {\n index = datum[indexKey] ?? index;\n }\n\n // 创建动画实例\n const animate = graphic.animate() as unknown as IAnimate;\n animate.priority = priority;\n\n // 设置开始时间\n animate.startAt(startTime as number);\n animate.wait(index * oneByOneDelay);\n\n // 设置循环\n if (loop && (loop as number) > 0) {\n animate.loop(loop as number);\n }\n\n // 设置反弹\n if (bounce) {\n animate.bounce(true);\n }\n\n // 处理时间切片\n const slices = Array.isArray(timeSlices) ? timeSlices : [timeSlices];\n\n slices.forEach(slice => {\n this.applyTimeSliceToAnimate(slice, animate, graphic, controlOptions);\n });\n\n // 后等待\n if (oneByOneDelay) {\n animate.wait(oneByOneDelay * (count - index - 1));\n }\n\n return animate;\n }\n\n /**\n * 将时间切片应用到动画实例\n */\n private applyTimeSliceToAnimate(\n slice: IAnimationTimeSlice,\n animate: IAnimate,\n graphic: IGraphic,\n controlOptions: any\n ) {\n const { effects, duration = 300, delay = 0, delayAfter = 0 } = slice;\n\n // 解析时间参数\n // const durationValue = duration as number;\n const delayValue = isFunction(delay) ? delay(graphic.context?.data?.[0], graphic, {}) : delay;\n const delayAfterValue = isFunction(delayAfter) ? delayAfter(graphic.context?.data?.[0], graphic, {}) : delayAfter;\n\n // 添加延迟\n if (delayValue > 0) {\n animate.wait(delayValue);\n }\n\n // 处理动画效果\n const effectsArray = Array.isArray(effects) ? effects : [effects];\n\n effectsArray.forEach(effect => {\n const { type = 'fromTo', channel, customParameters, easing = 'linear', options } = effect;\n\n // 根据 channel 配置创建属性对象\n let parsedFromProps = null;\n let props = effect.to;\n let from = effect.from;\n if (!props) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n props = parsedFromProps.props;\n }\n if (!from) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n from = parsedFromProps.from;\n }\n const custom = effect.custom ?? AnimateExecutor.builtInAnimateMap[type];\n const customType = (effect as any).customType;\n this._handleRunAnimate(\n animate,\n custom,\n customType,\n from,\n props,\n duration as number,\n easing,\n customParameters,\n controlOptions,\n options,\n type,\n graphic\n );\n });\n\n // 添加后延迟\n if (delayAfterValue > 0) {\n animate.wait(delayAfterValue);\n }\n }\n\n /**\n * 创建自定义插值器动画\n */\n private createCustomInterpolatorAnimation(\n animate: IAnimate,\n interpolator: IAnimationChannelInterpolator,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParams: any\n ) {\n // 获取动画目标的当前属性作为起始值\n const from: Record<string, any> = {};\n const to = props;\n\n // 为每个属性填充起始值\n Object.keys(to).forEach(key => {\n from[key] = animate.target.getComputedAttribute(key);\n });\n\n animate.interpolateUpdateFunction = (from, to, ratio, step, target) => {\n interpolator(ratio, from, to, step, target, animate.target, customParams);\n };\n\n animate.to(props, duration, easing);\n }\n\n /**\n * 创建自定义动画类\n */\n private createCustomAnimation(\n animate: IAnimate,\n CustomAnimateConstructor: IAnimationCustomConstructor,\n from: Record<string, any> | null,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParams: any\n ) {\n // 获取动画目标的当前属性作为起始值\n // const from: Record<string, any> = {};\n const to = props;\n\n // // 为每个属性填充起始值\n // Object.keys(to).forEach(key => {\n // from[key] = animate.target.getComputedAttribute(key);\n // });\n\n // 实例化自定义动画类\n // 自定义动画自己去计算from\n const customAnimate = new CustomAnimateConstructor(from, to, duration, easing, customParams);\n\n // 播放自定义动画\n animate.play(customAnimate);\n }\n\n /**\n * 从 channel 配置创建属性对象\n */\n private createPropsFromChannel(\n channel: IAnimationChannelAttrs | IAnimationChannelAttributes | undefined,\n graphic: IGraphic\n ): { from: Record<string, any> | null; props: Record<string, any> } {\n const props: Record<string, any> = {};\n let from: Record<string, any> | null = null;\n\n if (!channel) {\n return {\n from,\n props\n };\n }\n\n if (!Array.isArray(channel)) {\n // 如果是对象,解析 from/to 配置\n Object.keys(channel).forEach(key => {\n const config = channel[key];\n if (config.to !== undefined) {\n if (typeof config.to === 'function') {\n props[key] = config.to((graphic.context as any)?.data?.[0], graphic, {});\n } else {\n props[key] = config.to;\n }\n }\n if (config.from !== undefined) {\n if (!from) {\n from = {};\n }\n if (typeof config.from === 'function') {\n from[key] = config.from((graphic.context as any)?.data?.[0], graphic, {});\n } else {\n from[key] = config.from;\n }\n }\n });\n } else {\n channel.forEach(key => {\n const value = graphic.context?.diffAttrs?.[key];\n if (value !== undefined) {\n props[key] = value;\n }\n });\n }\n\n return {\n from,\n props\n };\n }\n\n /**\n * 解析函数或值类型的配置项\n */\n private resolveValue<T>(value: MarkFunctionValueType<T> | undefined, graphic?: IGraphic, defaultValue?: T): T {\n if (value === undefined) {\n return defaultValue as T;\n }\n\n if (typeof value === 'function' && graphic) {\n return (value as MarkFunctionCallback<T>)((graphic.context as any)?.data?.[0], graphic, {});\n }\n\n return value as T;\n }\n\n executeItem(params: IAnimationConfig | IAnimationConfig[], graphic: IGraphic, index: number = 0, count: number = 1) {\n if (Array.isArray(params)) {\n return params.map(param => this._executeItem(param, graphic, index, count)).filter(Boolean);\n }\n return [this._executeItem(params, graphic, index, count)].filter(Boolean);\n }\n\n /**\n * 执行动画(具体执行到内部的单个图元)\n */\n _executeItem(params: IAnimationConfig, graphic: IGraphic, index: number = 0, count: number = 1): IAnimate | null {\n if (!graphic) {\n return null;\n }\n\n const isTimeline = 'timeSlices' in params;\n let animate: IAnimate | null = null;\n\n const parsedParams = this.parseParams(params, isTimeline);\n\n if (isTimeline) {\n // 处理 Timeline 类型的动画配置\n animate = this.executeTimelineItem(parsedParams as IAnimationTimeline, graphic, index, count);\n } else {\n // 处理 TypeConfig 类型的动画配置\n animate = this.executeTypeConfigItem(parsedParams as IAnimationTypeConfig, graphic, index, count);\n }\n\n // 跟踪动画以进行生命周期管理\n if (animate) {\n this._trackAnimation(animate);\n }\n\n return animate;\n }\n\n /**\n * 停止所有由该执行器管理的动画\n */\n stop(type?: 'start' | 'end' | Record<string, any>): void {\n // animate.stop会从数组里删除,所以需要while循环,不能forEach\n while (this._animates.length > 0) {\n const animate = this._animates.pop();\n animate?.stop(type);\n }\n\n // 清空动画实例数组\n this._animates = [];\n this._activeCount = 0;\n\n // 如果动画正在运行,触发结束回调\n if (this._started) {\n this._started = false;\n this.onEnd();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/executor/animate-executor.ts"],"names":[],"mappings":"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","file":"animate-executor.js","sourcesContent":["import type { IGraphic, EasingType, IAnimate } from '@visactor/vrender-core';\nimport type {\n IAnimationConfig,\n IAnimationTimeline,\n IAnimationTypeConfig,\n MarkFunctionCallback,\n MarkFunctionValueType,\n IAnimationTimeSlice,\n IAnimationChannelAttrs,\n IAnimationChannelAttributes,\n IAnimationCustomConstructor,\n IAnimationChannelInterpolator\n} from './executor';\nimport { cloneDeep, isArray, isFunction } from '@visactor/vutils';\n\ninterface IAnimateExecutor {\n execute: (params: IAnimationConfig) => void;\n executeItem: (params: IAnimationConfig, graphic: IGraphic, index?: number) => IAnimate[];\n onStart: (cb?: () => void) => void;\n onEnd: (cb?: () => void) => void;\n}\n\nexport class AnimateExecutor implements IAnimateExecutor {\n static builtInAnimateMap: Record<string, IAnimationCustomConstructor> = {};\n\n static registerBuiltInAnimate(name: string, animate: IAnimationCustomConstructor) {\n AnimateExecutor.builtInAnimateMap[name] = animate;\n }\n\n declare _target: IGraphic;\n\n // 所有动画实例\n private _animates: IAnimate[] = [];\n\n // 动画开始回调\n private _startCallbacks: (() => void)[] = [];\n // 动画结束回调\n private _endCallbacks: (() => void)[] = [];\n\n // 是否已经开始动画\n private _started: boolean = false;\n\n // 当前正在运行的动画数量\n private _activeCount: number = 0;\n\n constructor(target: IGraphic) {\n this._target = target;\n }\n\n /**\n * 注册一个回调,当动画开始时调用\n */\n onStart(cb?: () => void): void {\n if (cb) {\n this._startCallbacks.push(cb);\n\n // 如果动画已经开始,立即调用回调\n if (this._started && this._activeCount > 0) {\n cb();\n }\n } else {\n this._startCallbacks.forEach(cb => {\n cb();\n });\n }\n }\n\n /**\n * 注册一个回调,当所有动画结束时调用\n */\n onEnd(cb?: () => void): void {\n if (cb) {\n this._endCallbacks.push(cb);\n } else {\n this._endCallbacks.forEach(cb => {\n cb();\n });\n }\n }\n\n /**\n * 跟踪动画并附加生命周期钩子\n */\n private _trackAnimation(animate: IAnimate): void {\n this._animates.push(animate);\n this._activeCount++;\n\n // 如果这是第一个正在运行的动画,触发onStart回调\n if (this._activeCount === 1 && !this._started) {\n this._started = true;\n this.onStart();\n }\n\n // 处理动画完成\n animate.onEnd(() => {\n this._activeCount--;\n\n // 从跟踪的动画中移除\n const index = this._animates.indexOf(animate);\n if (index >= 0) {\n this._animates.splice(index, 1);\n }\n\n // 如果所有动画都已完成,触发onEnd回调\n if (this._activeCount === 0 && this._started) {\n this._started = false;\n this.onEnd();\n }\n });\n }\n\n parseParams(params: IAnimationConfig, isTimeline: boolean, child?: IGraphic): IAnimationConfig {\n const totalTime = this.resolveValue(params.totalTime, undefined, undefined);\n const startTime = this.resolveValue(params.startTime, undefined, 0);\n\n // execute只在mark层面调用,所以性能影响可以忽略\n // TODO 存在性能问题,如果后续调用频繁,需要重新修改\n const parsedParams: Record<string, any> = { ...params };\n parsedParams.oneByOneDelay = 0;\n parsedParams.startTime = startTime;\n parsedParams.totalTime = totalTime;\n\n const oneByOne = this.resolveValue(params.oneByOne, child, false);\n\n if (isTimeline) {\n const timeSlices = (parsedParams as IAnimationTimeline).timeSlices;\n if (!isArray(timeSlices)) {\n (parsedParams as IAnimationTimeline).timeSlices = [timeSlices];\n }\n let sliceTime = 0;\n ((parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]) = (\n (parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]\n ).map(slice => {\n const delay = this.resolveValue(slice.delay, child, 0);\n const delayAfter = this.resolveValue(slice.delayAfter, child, 0);\n const duration = this.resolveValue(slice.duration, child, 300);\n sliceTime += delay + duration + delayAfter;\n return {\n ...slice,\n delay,\n delayAfter,\n duration\n };\n });\n let oneByOneDelay = 0;\n if (oneByOne) {\n oneByOneDelay = typeof oneByOne === 'number' ? (oneByOne as number) : oneByOne ? sliceTime : 0;\n }\n parsedParams.oneByOneDelay = oneByOneDelay;\n\n let scale = 1;\n if (totalTime) {\n const _totalTime = sliceTime + oneByOneDelay * (this._target.count - 2);\n scale = totalTime ? totalTime / _totalTime : 1;\n }\n ((parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]) = (\n (parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]\n ).map(slice => {\n let effects = slice.effects;\n if (!Array.isArray(effects)) {\n effects = [effects];\n }\n return {\n ...slice,\n delay: (slice.delay as number) * scale,\n delayAfter: (slice.delayAfter as number) * scale,\n duration: (slice.duration as number) * scale,\n effects: effects.map(effect => {\n const custom = effect.custom ?? AnimateExecutor.builtInAnimateMap[(effect.type as any) ?? 'fromTo'];\n const customType =\n custom && isFunction(custom) ? (/^class\\s/.test(Function.prototype.toString.call(custom)) ? 1 : 2) : 0;\n return {\n ...effect,\n custom,\n customType\n };\n })\n };\n });\n parsedParams.oneByOneDelay = oneByOneDelay * scale;\n (parsedParams as IAnimationTimeline).startTime = startTime * scale;\n } else {\n const delay = this.resolveValue((params as IAnimationTypeConfig).delay, child, 0);\n const delayAfter = this.resolveValue((params as IAnimationTypeConfig).delayAfter, child, 0);\n const duration = this.resolveValue((params as IAnimationTypeConfig).duration, child, 300);\n const loopTime = delay + delayAfter + duration;\n\n let oneByOneDelay = 0;\n if (oneByOne) {\n oneByOneDelay = typeof oneByOne === 'number' ? (oneByOne as number) : oneByOne ? loopTime : 0;\n }\n parsedParams.oneByOneDelay = oneByOneDelay;\n parsedParams.custom =\n (params as IAnimationTypeConfig).custom ??\n AnimateExecutor.builtInAnimateMap[(params as IAnimationTypeConfig).type ?? 'fromTo'];\n\n const customType =\n parsedParams.custom && isFunction(parsedParams.custom)\n ? /^class\\s/.test(Function.prototype.toString.call(parsedParams.custom))\n ? 1\n : 2\n : 0;\n parsedParams.customType = customType;\n\n if (totalTime) {\n const _totalTime = delay + delayAfter + duration + oneByOneDelay * (this._target.count - 2);\n const scale = totalTime ? totalTime / _totalTime : 1;\n parsedParams.delay = delay * scale;\n parsedParams.delayAfter = delayAfter * scale;\n parsedParams.duration = duration * scale;\n parsedParams.oneByOneDelay = oneByOneDelay * scale;\n (parsedParams as IAnimationTypeConfig).startTime = startTime;\n }\n }\n\n return parsedParams;\n }\n\n execute(params: IAnimationConfig | IAnimationConfig[]) {\n if (Array.isArray(params)) {\n params.forEach(param => this._execute(param));\n } else {\n this._execute(params);\n }\n }\n\n /**\n * 执行动画,针对一组元素\n */\n _execute(params: IAnimationConfig) {\n if (params.selfOnly) {\n return this._executeItem(params, this._target, 0, 1);\n }\n\n // 判断是否为timeline配置\n const isTimeline = 'timeSlices' in params;\n\n // 筛选符合条件的子图元\n let filteredChildren: IGraphic[];\n\n // 如果设置了partitioner,则进行筛选\n if (isTimeline && params.partitioner) {\n filteredChildren = (filteredChildren ?? (this._target.getChildren() as IGraphic[])).filter(child => {\n return (params as IAnimationTimeline).partitioner((child.context as any)?.data?.[0], child, {});\n });\n }\n\n // 如果需要排序,则进行排序\n if (isTimeline && (params as IAnimationTimeline).sort) {\n filteredChildren = filteredChildren ?? (this._target.getChildren() as IGraphic[]);\n filteredChildren.sort((a, b) => {\n return (params as IAnimationTimeline).sort(\n (a.context as any)?.data?.[0],\n (b.context as any)?.data?.[0],\n a,\n b,\n {}\n );\n });\n }\n\n //\n\n const cb = isTimeline\n ? (child: IGraphic, index: number, count: number) => {\n const parsedParams = this.parseParams(params, isTimeline, child);\n // 执行单个图元的timeline动画\n const animate = this.executeTimelineItem(parsedParams as IAnimationTimeline, child, index, count);\n if (animate) {\n this._trackAnimation(animate);\n }\n }\n : (child: IGraphic, index: number, count: number) => {\n const parsedParams = this.parseParams(params, isTimeline, child);\n // 执行单个图元的config动画\n const animate = this.executeTypeConfigItem(parsedParams as IAnimationTypeConfig, child, index, count);\n if (animate) {\n this._trackAnimation(animate);\n }\n };\n\n // 执行每个图元的动画\n if (filteredChildren) {\n filteredChildren.forEach((child, index) => cb(child, index, filteredChildren.length));\n } else if (this._target.count <= 1) {\n cb(this._target, 0, 1);\n } else {\n this._target.forEachChildren((child, index) => cb(child as IGraphic, index, this._target.count - 1));\n }\n\n return;\n }\n\n /**\n * 执行 TypeConfig 类型的动画\n */\n private executeTypeConfigItem(\n params: IAnimationTypeConfig,\n graphic: IGraphic,\n index: number,\n count: number\n ): IAnimate {\n const {\n type = 'fromTo',\n channel,\n customParameters,\n easing = 'linear',\n delay = 0,\n delayAfter = 0,\n duration = 300,\n startTime = 0,\n oneByOneDelay = 0,\n loop,\n bounce,\n priority = 0,\n options,\n custom,\n customType, // 0: undefined, 1: class, 2: function\n controlOptions\n } = params as any;\n\n // 创建动画实例\n const animate = graphic.animate() as unknown as IAnimate;\n animate.priority = priority;\n\n const delayValue = isFunction(delay) ? delay(graphic.context?.data?.[0], graphic, {}) : delay;\n\n // 如果设置了indexKey,则使用indexKey作为index\n const datum = graphic.context?.data?.[0];\n const indexKey = graphic.context?.indexKey;\n if (datum && indexKey) {\n index = datum[indexKey] ?? index;\n }\n\n // 设置开始时间\n animate.startAt(startTime as number);\n const wait = index * oneByOneDelay + delayValue;\n wait > 0 && animate.wait(wait);\n\n // 放到startAt中,否则label无法确定主图元何时开始\n // // 添加延迟\n // if (delayValue > 0) {\n // animate.wait(delayValue);\n // }\n\n // 根据 channel 配置创建属性对象\n // 根据 channel 配置创建属性对象\n let parsedFromProps = null;\n let props = params.to;\n let from = params.from;\n if (!props) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n props = parsedFromProps.props;\n }\n if (!from) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n from = parsedFromProps.from;\n }\n\n this._handleRunAnimate(\n animate,\n custom,\n customType,\n from,\n props,\n duration as number,\n easing,\n customParameters,\n controlOptions,\n options,\n type,\n graphic\n );\n\n let totalDelay = 0;\n if (oneByOneDelay) {\n totalDelay = oneByOneDelay * (count - index - 1);\n }\n\n // 添加后延迟\n const delayAfterValue = isFunction(delayAfter) ? delayAfter(graphic.context?.data?.[0], graphic, {}) : delayAfter;\n if (delayAfterValue > 0) {\n totalDelay += delayAfterValue as number;\n }\n\n if (totalDelay > 0) {\n animate.wait(totalDelay);\n }\n\n // 设置循环\n if (loop && (loop as number) > 0) {\n animate.loop(loop as number);\n }\n\n // 设置反弹\n if (bounce) {\n animate.bounce(true);\n }\n\n return animate;\n }\n\n private _handleRunAnimate(\n animate: IAnimate,\n custom: IAnimationCustomConstructor | IAnimationChannelInterpolator,\n customType: number, // 0: undefined, 1: class, 2: function\n from: Record<string, any> | null,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParameters: any,\n controlOptions: any,\n options: any,\n type: string,\n graphic: IGraphic\n ) {\n // 处理自定义动画\n if (custom && customType) {\n const customParams = this.resolveValue(customParameters, graphic, {\n width: graphic.stage.width,\n height: graphic.stage.height\n });\n const objOptions = isFunction(options)\n ? options.call(\n null,\n (customParams && customParams.data?.[0]) ?? graphic.context?.data?.[0],\n graphic,\n customParams\n )\n : options;\n customParams.options = objOptions;\n customParams.controlOptions = controlOptions;\n if (customType === 1) {\n // 自定义动画构造器 - 创建自定义动画类\n this.createCustomAnimation(\n animate,\n custom as IAnimationCustomConstructor,\n from,\n props,\n duration as number,\n easing,\n customParams\n );\n } else if (customType === 2) {\n // 自定义插值器 - 创建自定义插值动画\n this.createCustomInterpolatorAnimation(\n animate,\n custom as IAnimationChannelInterpolator,\n props,\n duration as number,\n easing,\n customParams\n );\n }\n } else if (type === 'to') {\n animate.to(props, duration as number, easing);\n } else if (type === 'from') {\n animate.from(props, duration as number, easing);\n }\n }\n\n /**\n * 执行 Timeline 类型的动画\n */\n private executeTimelineItem(params: IAnimationTimeline, graphic: IGraphic, index: number, count: number): IAnimate {\n const { timeSlices, startTime = 0, loop, bounce, oneByOneDelay, priority, controlOptions } = params as any;\n\n // 如果设置了indexKey,则使用indexKey作为index\n const datum = graphic.context?.data?.[0];\n const indexKey = graphic.context?.indexKey;\n if (datum && indexKey) {\n index = datum[indexKey] ?? index;\n }\n\n // 创建动画实例\n const animate = graphic.animate() as unknown as IAnimate;\n animate.priority = priority;\n\n // 设置开始时间\n animate.startAt(startTime as number);\n animate.wait(index * oneByOneDelay);\n\n // 设置循环\n if (loop && (loop as number) > 0) {\n animate.loop(loop as number);\n }\n\n // 设置反弹\n if (bounce) {\n animate.bounce(true);\n }\n\n // 处理时间切片\n const slices = Array.isArray(timeSlices) ? timeSlices : [timeSlices];\n\n slices.forEach(slice => {\n this.applyTimeSliceToAnimate(slice, animate, graphic, controlOptions);\n });\n\n // 后等待\n if (oneByOneDelay) {\n animate.wait(oneByOneDelay * (count - index - 1));\n }\n\n return animate;\n }\n\n /**\n * 将时间切片应用到动画实例\n */\n private applyTimeSliceToAnimate(\n slice: IAnimationTimeSlice,\n animate: IAnimate,\n graphic: IGraphic,\n controlOptions: any\n ) {\n const { effects, duration = 300, delay = 0, delayAfter = 0 } = slice;\n\n // 解析时间参数\n // const durationValue = duration as number;\n const delayValue = isFunction(delay) ? delay(graphic.context?.data?.[0], graphic, {}) : delay;\n const delayAfterValue = isFunction(delayAfter) ? delayAfter(graphic.context?.data?.[0], graphic, {}) : delayAfter;\n\n // 添加延迟\n if (delayValue > 0) {\n animate.wait(delayValue);\n }\n\n // 处理动画效果\n const effectsArray = Array.isArray(effects) ? effects : [effects];\n\n effectsArray.forEach(effect => {\n const { type = 'fromTo', channel, customParameters, easing = 'linear', options } = effect;\n\n // 根据 channel 配置创建属性对象\n let parsedFromProps = null;\n let props = effect.to;\n let from = effect.from;\n if (!props) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n props = parsedFromProps.props;\n }\n if (!from) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n from = parsedFromProps.from;\n }\n const custom = effect.custom ?? AnimateExecutor.builtInAnimateMap[type];\n const customType = (effect as any).customType;\n this._handleRunAnimate(\n animate,\n custom,\n customType,\n from,\n props,\n duration as number,\n easing,\n customParameters,\n controlOptions,\n options,\n type,\n graphic\n );\n });\n\n // 添加后延迟\n if (delayAfterValue > 0) {\n animate.wait(delayAfterValue);\n }\n }\n\n /**\n * 创建自定义插值器动画\n */\n private createCustomInterpolatorAnimation(\n animate: IAnimate,\n interpolator: IAnimationChannelInterpolator,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParams: any\n ) {\n // 获取动画目标的当前属性作为起始值\n const from: Record<string, any> = {};\n const to = props;\n\n // 为每个属性填充起始值\n Object.keys(to).forEach(key => {\n from[key] = animate.target.getComputedAttribute(key);\n });\n\n animate.interpolateUpdateFunction = (from, to, ratio, step, target) => {\n interpolator(ratio, from, to, step, target, animate.target, customParams);\n };\n\n animate.to(props, duration, easing);\n }\n\n /**\n * 创建自定义动画类\n */\n private createCustomAnimation(\n animate: IAnimate,\n CustomAnimateConstructor: IAnimationCustomConstructor,\n from: Record<string, any> | null,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParams: any\n ) {\n // 获取动画目标的当前属性作为起始值\n // const from: Record<string, any> = {};\n const to = props;\n\n // // 为每个属性填充起始值\n // Object.keys(to).forEach(key => {\n // from[key] = animate.target.getComputedAttribute(key);\n // });\n\n // 实例化自定义动画类\n // 自定义动画自己去计算from\n const customAnimate = new CustomAnimateConstructor(from, to, duration, easing, customParams);\n\n // 播放自定义动画\n animate.play(customAnimate);\n }\n\n /**\n * 从 channel 配置创建属性对象\n */\n private createPropsFromChannel(\n channel: IAnimationChannelAttrs | IAnimationChannelAttributes | undefined,\n graphic: IGraphic\n ): { from: Record<string, any> | null; props: Record<string, any> } {\n const props: Record<string, any> = {};\n let from: Record<string, any> | null = null;\n\n if (!channel) {\n return {\n from,\n props\n };\n }\n\n if (!Array.isArray(channel)) {\n // 如果是对象,解析 from/to 配置\n Object.keys(channel).forEach(key => {\n const config = channel[key];\n if (config.to !== undefined) {\n if (typeof config.to === 'function') {\n props[key] = config.to((graphic.context as any)?.data?.[0], graphic, {});\n } else {\n props[key] = config.to;\n }\n }\n if (config.from !== undefined) {\n if (!from) {\n from = {};\n }\n if (typeof config.from === 'function') {\n from[key] = config.from((graphic.context as any)?.data?.[0], graphic, {});\n } else {\n from[key] = config.from;\n }\n }\n });\n } else {\n channel.forEach(key => {\n const value = graphic.context?.diffAttrs?.[key];\n if (value !== undefined) {\n props[key] = value;\n }\n });\n }\n\n return {\n from,\n props\n };\n }\n\n /**\n * 解析函数或值类型的配置项\n */\n private resolveValue<T>(value: MarkFunctionValueType<T> | undefined, graphic?: IGraphic, defaultValue?: T): T {\n if (value === undefined) {\n return defaultValue as T;\n }\n\n if (typeof value === 'function' && graphic) {\n return (value as MarkFunctionCallback<T>)((graphic.context as any)?.data?.[0], graphic, {});\n }\n\n return value as T;\n }\n\n executeItem(params: IAnimationConfig | IAnimationConfig[], graphic: IGraphic, index: number = 0, count: number = 1) {\n if (Array.isArray(params)) {\n return params.map(param => this._executeItem(param, graphic, index, count)).filter(Boolean);\n }\n return [this._executeItem(params, graphic, index, count)].filter(Boolean);\n }\n\n /**\n * 执行动画(具体执行到内部的单个图元)\n */\n _executeItem(params: IAnimationConfig, graphic: IGraphic, index: number = 0, count: number = 1): IAnimate | null {\n if (!graphic) {\n return null;\n }\n\n const isTimeline = 'timeSlices' in params;\n let animate: IAnimate | null = null;\n\n const parsedParams = this.parseParams(params, isTimeline);\n\n if (isTimeline) {\n // 处理 Timeline 类型的动画配置\n animate = this.executeTimelineItem(parsedParams as IAnimationTimeline, graphic, index, count);\n } else {\n // 处理 TypeConfig 类型的动画配置\n animate = this.executeTypeConfigItem(parsedParams as IAnimationTypeConfig, graphic, index, count);\n }\n\n // 跟踪动画以进行生命周期管理\n if (animate) {\n this._trackAnimation(animate);\n }\n\n return animate;\n }\n\n /**\n * 停止所有由该执行器管理的动画\n */\n stop(type?: 'start' | 'end' | Record<string, any>): void {\n // animate.stop会从数组里删除,所以需要while循环,不能forEach\n while (this._animates.length > 0) {\n const animate = this._animates.pop();\n animate?.stop(type);\n }\n\n // 清空动画实例数组\n this._animates = [];\n this._activeCount = 0;\n\n // 如果动画正在运行,触发结束回调\n if (this._started) {\n this._started = false;\n this.onEnd();\n }\n }\n}\n"]}
|
|
@@ -18,6 +18,8 @@ export declare class InterpolateUpdateStore {
|
|
|
18
18
|
height: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
19
19
|
x: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
20
20
|
y: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
21
|
+
dx: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
22
|
+
dy: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
21
23
|
angle: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
22
24
|
scaleX: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
23
25
|
scaleY: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
package/cjs/interpolate/store.js
CHANGED
|
@@ -44,6 +44,12 @@ class InterpolateUpdateStore {
|
|
|
44
44
|
}, this.y = (key, from, to, ratio, step, target) => {
|
|
45
45
|
target.attribute.y = (0, number_1.interpolateNumber)(from, to, ratio), target.addUpdateBoundTag(),
|
|
46
46
|
target.addUpdatePositionTag();
|
|
47
|
+
}, this.dx = (key, from, to, ratio, step, target) => {
|
|
48
|
+
target.attribute.dx = (0, number_1.interpolateNumber)(from, to, ratio), target.addUpdateBoundTag(),
|
|
49
|
+
target.addUpdatePositionTag();
|
|
50
|
+
}, this.dy = (key, from, to, ratio, step, target) => {
|
|
51
|
+
target.attribute.dy = (0, number_1.interpolateNumber)(from, to, ratio), target.addUpdateBoundTag(),
|
|
52
|
+
target.addUpdatePositionTag();
|
|
47
53
|
}, this.angle = (key, from, to, ratio, step, target) => {
|
|
48
54
|
target.attribute.angle = (0, number_1.interpolateNumber)(from, to, ratio), target.addUpdateBoundTag(),
|
|
49
55
|
target.addUpdatePositionTag();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interpolate/store.ts"],"names":[],"mappings":"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","file":"store.js","sourcesContent":["import type { IGraphic, IStep } from '@visactor/vrender-core';\nimport { interpolateColor, interpolatePureColorArrayToStr, pointsInterpolation } from '@visactor/vrender-core';\nimport { interpolateNumber } from './number';\nimport type { IPointLike } from '@visactor/vutils';\n\n// 直接设置,触发 隐藏类(Hidden Class)优化:\n/**\n *\nconst a = { type: 1 };\nconst ITERATIONS = 1e7; // 测试次数\n\n// 动态生成 keys 数组(确保引擎无法静态推断 key)\nconst keys = [];\nfor (let i = 0; i < ITERATIONS; i++) {\n // 通过条件确保 key 动态变化(但实际始终为 'type',避免属性缺失的开销)\n keys.push(Math.random() < 0 ? 'other' : 'type');\n}\n\n// 测试字面量访问\nfunction testLiteral() {\n let sum = 0;\n for (let i = 0; i < ITERATIONS; i++) {\n const key = keys[i]; // 读取 key(与动态测试完全一致)\n sum += a.type; // 差异仅在此处:使用字面量访问\n }\n return sum;\n}\n\n// 测试变量动态访问\nfunction testDynamic() {\n let sum = 0;\n for (let i = 0; i < ITERATIONS; i++) {\n const key = keys[i]; // 读取 key(与字面量测试完全一致)\n sum += a[key]; // 差异仅在此处:使用变量访问\n }\n return sum;\n}\n\n// 预热(避免 JIT 编译影响)\ntestLiteral();\ntestDynamic();\n\n// 正式测试\nconsole.time('literal');\ntestLiteral();\nconsole.timeEnd('literal');\n\nconsole.time('dynamic');\ntestDynamic();\nconsole.timeEnd('dynamic');\n\n\n// out:\n// literal: 7.1259765625 ms\n// dynamic: 9.322998046875 ms\n */\n\nexport class InterpolateUpdateStore {\n opacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.opacity = interpolateNumber(from, to, ratio);\n };\n baseOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).baseOpacity = interpolateNumber(from, to, ratio);\n };\n fillOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.fillOpacity = interpolateNumber(from, to, ratio);\n };\n strokeOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.strokeOpacity = interpolateNumber(from, to, ratio);\n };\n zIndex = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.zIndex = interpolateNumber(from, to, ratio);\n };\n backgroundOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.backgroundOpacity = interpolateNumber(from, to, ratio);\n };\n shadowOffsetX = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowOffsetX = interpolateNumber(from, to, ratio);\n };\n shadowOffsetY = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowOffsetY = interpolateNumber(from, to, ratio);\n };\n shadowBlur = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowBlur = interpolateNumber(from, to, ratio);\n };\n fill = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.fill = interpolateColor(from, to, ratio, false) as any;\n };\n fillPure = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.fill = step.fromParsedProps.fill\n ? (interpolatePureColorArrayToStr(step.fromParsedProps.fill, step.toParsedProps.fill, ratio) as any)\n : step.toParsedProps.fill;\n };\n stroke = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.stroke = interpolateColor(from, to, ratio, false);\n };\n strokePure = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.stroke = step.fromParsedProps.stroke\n ? (interpolatePureColorArrayToStr(step.fromParsedProps.stroke, step.toParsedProps.stroke, ratio) as any)\n : step.toParsedProps.stroke;\n };\n\n // 需要更新Bounds\n width = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).width = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n height = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).height = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n x = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.x = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n y = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.y = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n angle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.angle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n scaleX = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.scaleX = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n scaleY = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.scaleY = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n lineWidth = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.lineWidth = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n startAngle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).startAngle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n endAngle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).endAngle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n radius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).radius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n outerRadius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).outerRadius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n innerRadius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).innerRadius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n size = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).size = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n points = (key: string, from: IPointLike[], to: IPointLike[], ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).points = pointsInterpolation(from, to, ratio);\n target.addUpdateBoundTag();\n };\n}\n\nexport const interpolateUpdateStore = new InterpolateUpdateStore();\n\nexport function commonInterpolateUpdate(key: string, from: any, to: any, ratio: number, step: IStep, target: IGraphic) {\n if (Number.isFinite(to) && Number.isFinite(from)) {\n (target.attribute as any)[key] = from + (to - from) * ratio;\n return true;\n } else if (Array.isArray(to) && Array.isArray(from) && to.length === from.length) {\n const nextList = [];\n let valid = true;\n for (let i = 0; i < to.length; i++) {\n const v = from[i];\n const val = v + (to[i] - v) * ratio;\n if (!Number.isFinite(val)) {\n valid = false;\n break;\n }\n nextList.push(val);\n }\n if (valid) {\n (target.attribute as any)[key] = nextList;\n }\n return true;\n }\n return false;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/interpolate/store.ts"],"names":[],"mappings":"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","file":"store.js","sourcesContent":["import type { IGraphic, IStep } from '@visactor/vrender-core';\nimport { interpolateColor, interpolatePureColorArrayToStr, pointsInterpolation } from '@visactor/vrender-core';\nimport { interpolateNumber } from './number';\nimport type { IPointLike } from '@visactor/vutils';\n\n// 直接设置,触发 隐藏类(Hidden Class)优化:\n/**\n *\nconst a = { type: 1 };\nconst ITERATIONS = 1e7; // 测试次数\n\n// 动态生成 keys 数组(确保引擎无法静态推断 key)\nconst keys = [];\nfor (let i = 0; i < ITERATIONS; i++) {\n // 通过条件确保 key 动态变化(但实际始终为 'type',避免属性缺失的开销)\n keys.push(Math.random() < 0 ? 'other' : 'type');\n}\n\n// 测试字面量访问\nfunction testLiteral() {\n let sum = 0;\n for (let i = 0; i < ITERATIONS; i++) {\n const key = keys[i]; // 读取 key(与动态测试完全一致)\n sum += a.type; // 差异仅在此处:使用字面量访问\n }\n return sum;\n}\n\n// 测试变量动态访问\nfunction testDynamic() {\n let sum = 0;\n for (let i = 0; i < ITERATIONS; i++) {\n const key = keys[i]; // 读取 key(与字面量测试完全一致)\n sum += a[key]; // 差异仅在此处:使用变量访问\n }\n return sum;\n}\n\n// 预热(避免 JIT 编译影响)\ntestLiteral();\ntestDynamic();\n\n// 正式测试\nconsole.time('literal');\ntestLiteral();\nconsole.timeEnd('literal');\n\nconsole.time('dynamic');\ntestDynamic();\nconsole.timeEnd('dynamic');\n\n\n// out:\n// literal: 7.1259765625 ms\n// dynamic: 9.322998046875 ms\n */\n\nexport class InterpolateUpdateStore {\n opacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.opacity = interpolateNumber(from, to, ratio);\n };\n baseOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).baseOpacity = interpolateNumber(from, to, ratio);\n };\n fillOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.fillOpacity = interpolateNumber(from, to, ratio);\n };\n strokeOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.strokeOpacity = interpolateNumber(from, to, ratio);\n };\n zIndex = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.zIndex = interpolateNumber(from, to, ratio);\n };\n backgroundOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.backgroundOpacity = interpolateNumber(from, to, ratio);\n };\n shadowOffsetX = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowOffsetX = interpolateNumber(from, to, ratio);\n };\n shadowOffsetY = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowOffsetY = interpolateNumber(from, to, ratio);\n };\n shadowBlur = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowBlur = interpolateNumber(from, to, ratio);\n };\n fill = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.fill = interpolateColor(from, to, ratio, false) as any;\n };\n fillPure = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.fill = step.fromParsedProps.fill\n ? (interpolatePureColorArrayToStr(step.fromParsedProps.fill, step.toParsedProps.fill, ratio) as any)\n : step.toParsedProps.fill;\n };\n stroke = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.stroke = interpolateColor(from, to, ratio, false);\n };\n strokePure = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.stroke = step.fromParsedProps.stroke\n ? (interpolatePureColorArrayToStr(step.fromParsedProps.stroke, step.toParsedProps.stroke, ratio) as any)\n : step.toParsedProps.stroke;\n };\n\n // 需要更新Bounds\n width = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).width = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n height = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).height = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n x = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.x = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n y = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.y = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n dx = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.dx = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n dy = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.dy = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n angle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.angle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n scaleX = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.scaleX = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n scaleY = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.scaleY = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n lineWidth = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.lineWidth = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n startAngle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).startAngle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n endAngle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).endAngle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n radius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).radius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n outerRadius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).outerRadius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n innerRadius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).innerRadius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n size = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).size = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n points = (key: string, from: IPointLike[], to: IPointLike[], ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).points = pointsInterpolation(from, to, ratio);\n target.addUpdateBoundTag();\n };\n}\n\nexport const interpolateUpdateStore = new InterpolateUpdateStore();\n\nexport function commonInterpolateUpdate(key: string, from: any, to: any, ratio: number, step: IStep, target: IGraphic) {\n if (Number.isFinite(to) && Number.isFinite(from)) {\n (target.attribute as any)[key] = from + (to - from) * ratio;\n return true;\n } else if (Array.isArray(to) && Array.isArray(from) && to.length === from.length) {\n const nextList = [];\n let valid = true;\n for (let i = 0; i < to.length; i++) {\n const v = from[i];\n const val = v + (to[i] - v) * ratio;\n if (!Number.isFinite(val)) {\n valid = false;\n break;\n }\n nextList.push(val);\n }\n if (valid) {\n (target.attribute as any)[key] = nextList;\n }\n return true;\n }\n return false;\n}\n"]}
|
package/dist/index.es.js
CHANGED
|
@@ -268,6 +268,16 @@ class InterpolateUpdateStore {
|
|
|
268
268
|
target.addUpdateBoundTag();
|
|
269
269
|
target.addUpdatePositionTag();
|
|
270
270
|
};
|
|
271
|
+
this.dx = (key, from, to, ratio, step, target) => {
|
|
272
|
+
target.attribute.dx = interpolateNumber(from, to, ratio);
|
|
273
|
+
target.addUpdateBoundTag();
|
|
274
|
+
target.addUpdatePositionTag();
|
|
275
|
+
};
|
|
276
|
+
this.dy = (key, from, to, ratio, step, target) => {
|
|
277
|
+
target.attribute.dy = interpolateNumber(from, to, ratio);
|
|
278
|
+
target.addUpdateBoundTag();
|
|
279
|
+
target.addUpdatePositionTag();
|
|
280
|
+
};
|
|
271
281
|
this.angle = (key, from, to, ratio, step, target) => {
|
|
272
282
|
target.attribute.angle = interpolateNumber(from, to, ratio);
|
|
273
283
|
target.addUpdateBoundTag();
|
|
@@ -1761,7 +1771,10 @@ class AnimateExecutor {
|
|
|
1761
1771
|
_handleRunAnimate(animate, custom, customType, from, props, duration, easing, customParameters, controlOptions, options, type, graphic) {
|
|
1762
1772
|
var _a, _b, _c, _d;
|
|
1763
1773
|
if (custom && customType) {
|
|
1764
|
-
const customParams = this.resolveValue(customParameters, graphic, {
|
|
1774
|
+
const customParams = this.resolveValue(customParameters, graphic, {
|
|
1775
|
+
width: graphic.stage.width,
|
|
1776
|
+
height: graphic.stage.height
|
|
1777
|
+
});
|
|
1765
1778
|
const objOptions = isFunction(options)
|
|
1766
1779
|
? options.call(null, (_b = (customParams && ((_a = customParams.data) === null || _a === void 0 ? void 0 : _a[0]))) !== null && _b !== void 0 ? _b : (_d = (_c = graphic.context) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d[0], graphic, customParams)
|
|
1767
1780
|
: options;
|
|
@@ -6704,12 +6717,12 @@ class FromTo extends ACustomAnimate {
|
|
|
6704
6717
|
onBind() {
|
|
6705
6718
|
var _a, _b;
|
|
6706
6719
|
super.onBind();
|
|
6707
|
-
const finalAttribute = this.target.getFinalAttribute();
|
|
6708
6720
|
Object.keys(this.from).forEach(key => {
|
|
6709
6721
|
if (this.props[key] == null) {
|
|
6710
|
-
this.props[key] =
|
|
6722
|
+
this.props[key] = this.target.getGraphicAttribute(key);
|
|
6711
6723
|
}
|
|
6712
6724
|
});
|
|
6725
|
+
const finalAttribute = this.target.getFinalAttribute();
|
|
6713
6726
|
if (((_a = this.target.context) === null || _a === void 0 ? void 0 : _a.animationState) === 'appear') {
|
|
6714
6727
|
if (finalAttribute) {
|
|
6715
6728
|
this.target.setAttributes(finalAttribute);
|
package/es/custom/fromTo.js
CHANGED
|
@@ -6,11 +6,11 @@ export class FromTo extends ACustomAnimate {
|
|
|
6
6
|
}
|
|
7
7
|
onBind() {
|
|
8
8
|
var _a, _b;
|
|
9
|
-
super.onBind()
|
|
9
|
+
super.onBind(), Object.keys(this.from).forEach((key => {
|
|
10
|
+
null == this.props[key] && (this.props[key] = this.target.getGraphicAttribute(key));
|
|
11
|
+
}));
|
|
10
12
|
const finalAttribute = this.target.getFinalAttribute();
|
|
11
|
-
|
|
12
|
-
null == this.props[key] && (this.props[key] = finalAttribute[key]);
|
|
13
|
-
})), "appear" === (null === (_a = this.target.context) || void 0 === _a ? void 0 : _a.animationState) && finalAttribute && this.target.setAttributes(finalAttribute),
|
|
13
|
+
"appear" === (null === (_a = this.target.context) || void 0 === _a ? void 0 : _a.animationState) && finalAttribute && this.target.setAttributes(finalAttribute),
|
|
14
14
|
!1 !== (null === (_b = this.params.controlOptions) || void 0 === _b ? void 0 : _b.immediatelyApply) && this.target.setAttributes(this.from);
|
|
15
15
|
}
|
|
16
16
|
onFirstRun() {
|
package/es/custom/fromTo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/custom/fromTo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,OAAO,MAAO,SAAQ,cAAsC;IAKhE,YAAY,IAAU,EAAE,EAAQ,EAAE,QAAgB,EAAE,MAAkB,EAAE,MAAY;QAClF,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM;;QACJ,KAAK,CAAC,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/custom/fromTo.ts"],"names":[],"mappings":"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","file":"fromTo.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport { ACustomAnimate } from './custom-animate';\n\nexport class FromTo extends ACustomAnimate<Record<string, number>> {\n declare valid: boolean;\n\n keys: string[];\n\n constructor(from: null, to: null, duration: number, easing: EasingType, params?: any) {\n super(from, to, duration, easing, params);\n this.from = from ?? {};\n }\n\n onBind(): void {\n super.onBind();\n\n // 如果存在from,不存在to,那么需要设置给props\n Object.keys(this.from).forEach(key => {\n if (this.props[key] == null) {\n this.props[key] = this.target.getGraphicAttribute(key);\n }\n });\n\n const finalAttribute = this.target.getFinalAttribute();\n // 如果入场动画,那么需要设置属性\n if (this.target.context?.animationState === 'appear') {\n if (finalAttribute) {\n this.target.setAttributes(finalAttribute);\n }\n }\n if (this.params.controlOptions?.immediatelyApply !== false) {\n this.target.setAttributes(this.from);\n }\n }\n\n onFirstRun(): void {\n // 获取上一步的属性值作为起始值\n this.from = { ...this.getLastProps(), ...this.from };\n const startProps = this.animate.getStartProps();\n this.propKeys &&\n this.propKeys.forEach(key => {\n this.from[key] = this.from[key] ?? startProps[key];\n });\n // TODO:比较hack\n // 如果是入场动画,那么还需要设置属性\n // if (this.target.context?.animationState === 'appear') {\n // // 用于入场的时候设置属性(因为有动画的时候VChart不会再设置属性了)\n // const finalAttribute = this.target.getFinalAttribute();\n // this.target.setAttributes(finalAttribute);\n // }\n this.target.setAttributes(this.from);\n }\n\n /**\n * 更新执行的时候调用\n * 如果跳帧了就不一定会执行\n */\n update(end: boolean, ratio: number, out: Record<string, any>): void {\n // TODO 需要修复,只有在开始的时候才调用\n this.onStart();\n if (!this.props || !this.propKeys) {\n return;\n }\n // 应用缓动函数\n const easedRatio = this.easing(ratio);\n this.animate.interpolateUpdateFunction\n ? this.animate.interpolateUpdateFunction(this.from, this.props, easedRatio, this, this.target)\n : this.interpolateUpdateFunctions.forEach((func, index) => {\n // 如果这个属性被屏蔽了,直接跳过\n if (!this.animate.validAttr(this.propKeys[index])) {\n return;\n }\n const key = this.propKeys[index];\n const fromValue = this.from[key];\n const toValue = this.props[key];\n func(key, fromValue, toValue, easedRatio, this, this.target);\n });\n this.onUpdate(end, easedRatio, out);\n this.syncAttributeUpdate();\n }\n}\n"]}
|
|
@@ -129,7 +129,10 @@ export class AnimateExecutor {
|
|
|
129
129
|
_handleRunAnimate(animate, custom, customType, from, props, duration, easing, customParameters, controlOptions, options, type, graphic) {
|
|
130
130
|
var _a, _b, _c, _d;
|
|
131
131
|
if (custom && customType) {
|
|
132
|
-
const customParams = this.resolveValue(customParameters, graphic, {
|
|
132
|
+
const customParams = this.resolveValue(customParameters, graphic, {
|
|
133
|
+
width: graphic.stage.width,
|
|
134
|
+
height: graphic.stage.height
|
|
135
|
+
}), objOptions = isFunction(options) ? options.call(null, null !== (_b = customParams && (null === (_a = customParams.data) || void 0 === _a ? void 0 : _a[0])) && void 0 !== _b ? _b : null === (_d = null === (_c = graphic.context) || void 0 === _c ? void 0 : _c.data) || void 0 === _d ? void 0 : _d[0], graphic, customParams) : options;
|
|
133
136
|
customParams.options = objOptions, customParams.controlOptions = controlOptions,
|
|
134
137
|
1 === customType ? this.createCustomAnimation(animate, custom, from, props, duration, easing, customParams) : 2 === customType && this.createCustomInterpolatorAnimation(animate, custom, props, duration, easing, customParams);
|
|
135
138
|
} else "to" === type ? animate.to(props, duration, easing) : "from" === type && animate.from(props, duration, easing);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/executor/animate-executor.ts"],"names":[],"mappings":"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","file":"animate-executor.js","sourcesContent":["import type { IGraphic, EasingType, IAnimate } from '@visactor/vrender-core';\nimport type {\n IAnimationConfig,\n IAnimationTimeline,\n IAnimationTypeConfig,\n MarkFunctionCallback,\n MarkFunctionValueType,\n IAnimationTimeSlice,\n IAnimationChannelAttrs,\n IAnimationChannelAttributes,\n IAnimationCustomConstructor,\n IAnimationChannelInterpolator\n} from './executor';\nimport { cloneDeep, isArray, isFunction } from '@visactor/vutils';\n\ninterface IAnimateExecutor {\n execute: (params: IAnimationConfig) => void;\n executeItem: (params: IAnimationConfig, graphic: IGraphic, index?: number) => IAnimate[];\n onStart: (cb?: () => void) => void;\n onEnd: (cb?: () => void) => void;\n}\n\nexport class AnimateExecutor implements IAnimateExecutor {\n static builtInAnimateMap: Record<string, IAnimationCustomConstructor> = {};\n\n static registerBuiltInAnimate(name: string, animate: IAnimationCustomConstructor) {\n AnimateExecutor.builtInAnimateMap[name] = animate;\n }\n\n declare _target: IGraphic;\n\n // 所有动画实例\n private _animates: IAnimate[] = [];\n\n // 动画开始回调\n private _startCallbacks: (() => void)[] = [];\n // 动画结束回调\n private _endCallbacks: (() => void)[] = [];\n\n // 是否已经开始动画\n private _started: boolean = false;\n\n // 当前正在运行的动画数量\n private _activeCount: number = 0;\n\n constructor(target: IGraphic) {\n this._target = target;\n }\n\n /**\n * 注册一个回调,当动画开始时调用\n */\n onStart(cb?: () => void): void {\n if (cb) {\n this._startCallbacks.push(cb);\n\n // 如果动画已经开始,立即调用回调\n if (this._started && this._activeCount > 0) {\n cb();\n }\n } else {\n this._startCallbacks.forEach(cb => {\n cb();\n });\n }\n }\n\n /**\n * 注册一个回调,当所有动画结束时调用\n */\n onEnd(cb?: () => void): void {\n if (cb) {\n this._endCallbacks.push(cb);\n } else {\n this._endCallbacks.forEach(cb => {\n cb();\n });\n }\n }\n\n /**\n * 跟踪动画并附加生命周期钩子\n */\n private _trackAnimation(animate: IAnimate): void {\n this._animates.push(animate);\n this._activeCount++;\n\n // 如果这是第一个正在运行的动画,触发onStart回调\n if (this._activeCount === 1 && !this._started) {\n this._started = true;\n this.onStart();\n }\n\n // 处理动画完成\n animate.onEnd(() => {\n this._activeCount--;\n\n // 从跟踪的动画中移除\n const index = this._animates.indexOf(animate);\n if (index >= 0) {\n this._animates.splice(index, 1);\n }\n\n // 如果所有动画都已完成,触发onEnd回调\n if (this._activeCount === 0 && this._started) {\n this._started = false;\n this.onEnd();\n }\n });\n }\n\n parseParams(params: IAnimationConfig, isTimeline: boolean, child?: IGraphic): IAnimationConfig {\n const totalTime = this.resolveValue(params.totalTime, undefined, undefined);\n const startTime = this.resolveValue(params.startTime, undefined, 0);\n\n // execute只在mark层面调用,所以性能影响可以忽略\n // TODO 存在性能问题,如果后续调用频繁,需要重新修改\n const parsedParams: Record<string, any> = { ...params };\n parsedParams.oneByOneDelay = 0;\n parsedParams.startTime = startTime;\n parsedParams.totalTime = totalTime;\n\n const oneByOne = this.resolveValue(params.oneByOne, child, false);\n\n if (isTimeline) {\n const timeSlices = (parsedParams as IAnimationTimeline).timeSlices;\n if (!isArray(timeSlices)) {\n (parsedParams as IAnimationTimeline).timeSlices = [timeSlices];\n }\n let sliceTime = 0;\n ((parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]) = (\n (parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]\n ).map(slice => {\n const delay = this.resolveValue(slice.delay, child, 0);\n const delayAfter = this.resolveValue(slice.delayAfter, child, 0);\n const duration = this.resolveValue(slice.duration, child, 300);\n sliceTime += delay + duration + delayAfter;\n return {\n ...slice,\n delay,\n delayAfter,\n duration\n };\n });\n let oneByOneDelay = 0;\n if (oneByOne) {\n oneByOneDelay = typeof oneByOne === 'number' ? (oneByOne as number) : oneByOne ? sliceTime : 0;\n }\n parsedParams.oneByOneDelay = oneByOneDelay;\n\n let scale = 1;\n if (totalTime) {\n const _totalTime = sliceTime + oneByOneDelay * (this._target.count - 2);\n scale = totalTime ? totalTime / _totalTime : 1;\n }\n ((parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]) = (\n (parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]\n ).map(slice => {\n let effects = slice.effects;\n if (!Array.isArray(effects)) {\n effects = [effects];\n }\n return {\n ...slice,\n delay: (slice.delay as number) * scale,\n delayAfter: (slice.delayAfter as number) * scale,\n duration: (slice.duration as number) * scale,\n effects: effects.map(effect => {\n const custom = effect.custom ?? AnimateExecutor.builtInAnimateMap[(effect.type as any) ?? 'fromTo'];\n const customType =\n custom && isFunction(custom) ? (/^class\\s/.test(Function.prototype.toString.call(custom)) ? 1 : 2) : 0;\n return {\n ...effect,\n custom,\n customType\n };\n })\n };\n });\n parsedParams.oneByOneDelay = oneByOneDelay * scale;\n (parsedParams as IAnimationTimeline).startTime = startTime * scale;\n } else {\n const delay = this.resolveValue((params as IAnimationTypeConfig).delay, child, 0);\n const delayAfter = this.resolveValue((params as IAnimationTypeConfig).delayAfter, child, 0);\n const duration = this.resolveValue((params as IAnimationTypeConfig).duration, child, 300);\n const loopTime = delay + delayAfter + duration;\n\n let oneByOneDelay = 0;\n if (oneByOne) {\n oneByOneDelay = typeof oneByOne === 'number' ? (oneByOne as number) : oneByOne ? loopTime : 0;\n }\n parsedParams.oneByOneDelay = oneByOneDelay;\n parsedParams.custom =\n (params as IAnimationTypeConfig).custom ??\n AnimateExecutor.builtInAnimateMap[(params as IAnimationTypeConfig).type ?? 'fromTo'];\n\n const customType =\n parsedParams.custom && isFunction(parsedParams.custom)\n ? /^class\\s/.test(Function.prototype.toString.call(parsedParams.custom))\n ? 1\n : 2\n : 0;\n parsedParams.customType = customType;\n\n if (totalTime) {\n const _totalTime = delay + delayAfter + duration + oneByOneDelay * (this._target.count - 2);\n const scale = totalTime ? totalTime / _totalTime : 1;\n parsedParams.delay = delay * scale;\n parsedParams.delayAfter = delayAfter * scale;\n parsedParams.duration = duration * scale;\n parsedParams.oneByOneDelay = oneByOneDelay * scale;\n (parsedParams as IAnimationTypeConfig).startTime = startTime;\n }\n }\n\n return parsedParams;\n }\n\n execute(params: IAnimationConfig | IAnimationConfig[]) {\n if (Array.isArray(params)) {\n params.forEach(param => this._execute(param));\n } else {\n this._execute(params);\n }\n }\n\n /**\n * 执行动画,针对一组元素\n */\n _execute(params: IAnimationConfig) {\n if (params.selfOnly) {\n return this._executeItem(params, this._target, 0, 1);\n }\n\n // 判断是否为timeline配置\n const isTimeline = 'timeSlices' in params;\n\n // 筛选符合条件的子图元\n let filteredChildren: IGraphic[];\n\n // 如果设置了partitioner,则进行筛选\n if (isTimeline && params.partitioner) {\n filteredChildren = (filteredChildren ?? (this._target.getChildren() as IGraphic[])).filter(child => {\n return (params as IAnimationTimeline).partitioner((child.context as any)?.data?.[0], child, {});\n });\n }\n\n // 如果需要排序,则进行排序\n if (isTimeline && (params as IAnimationTimeline).sort) {\n filteredChildren = filteredChildren ?? (this._target.getChildren() as IGraphic[]);\n filteredChildren.sort((a, b) => {\n return (params as IAnimationTimeline).sort(\n (a.context as any)?.data?.[0],\n (b.context as any)?.data?.[0],\n a,\n b,\n {}\n );\n });\n }\n\n //\n\n const cb = isTimeline\n ? (child: IGraphic, index: number, count: number) => {\n const parsedParams = this.parseParams(params, isTimeline, child);\n // 执行单个图元的timeline动画\n const animate = this.executeTimelineItem(parsedParams as IAnimationTimeline, child, index, count);\n if (animate) {\n this._trackAnimation(animate);\n }\n }\n : (child: IGraphic, index: number, count: number) => {\n const parsedParams = this.parseParams(params, isTimeline, child);\n // 执行单个图元的config动画\n const animate = this.executeTypeConfigItem(parsedParams as IAnimationTypeConfig, child, index, count);\n if (animate) {\n this._trackAnimation(animate);\n }\n };\n\n // 执行每个图元的动画\n if (filteredChildren) {\n filteredChildren.forEach((child, index) => cb(child, index, filteredChildren.length));\n } else if (this._target.count <= 1) {\n cb(this._target, 0, 1);\n } else {\n this._target.forEachChildren((child, index) => cb(child as IGraphic, index, this._target.count - 1));\n }\n\n return;\n }\n\n /**\n * 执行 TypeConfig 类型的动画\n */\n private executeTypeConfigItem(\n params: IAnimationTypeConfig,\n graphic: IGraphic,\n index: number,\n count: number\n ): IAnimate {\n const {\n type = 'fromTo',\n channel,\n customParameters,\n easing = 'linear',\n delay = 0,\n delayAfter = 0,\n duration = 300,\n startTime = 0,\n oneByOneDelay = 0,\n loop,\n bounce,\n priority = 0,\n options,\n custom,\n customType, // 0: undefined, 1: class, 2: function\n controlOptions\n } = params as any;\n\n // 创建动画实例\n const animate = graphic.animate() as unknown as IAnimate;\n animate.priority = priority;\n\n const delayValue = isFunction(delay) ? delay(graphic.context?.data?.[0], graphic, {}) : delay;\n\n // 如果设置了indexKey,则使用indexKey作为index\n const datum = graphic.context?.data?.[0];\n const indexKey = graphic.context?.indexKey;\n if (datum && indexKey) {\n index = datum[indexKey] ?? index;\n }\n\n // 设置开始时间\n animate.startAt(startTime as number);\n const wait = index * oneByOneDelay + delayValue;\n wait > 0 && animate.wait(wait);\n\n // 放到startAt中,否则label无法确定主图元何时开始\n // // 添加延迟\n // if (delayValue > 0) {\n // animate.wait(delayValue);\n // }\n\n // 根据 channel 配置创建属性对象\n // 根据 channel 配置创建属性对象\n let parsedFromProps = null;\n let props = params.to;\n let from = params.from;\n if (!props) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n props = parsedFromProps.props;\n }\n if (!from) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n from = parsedFromProps.from;\n }\n\n this._handleRunAnimate(\n animate,\n custom,\n customType,\n from,\n props,\n duration as number,\n easing,\n customParameters,\n controlOptions,\n options,\n type,\n graphic\n );\n\n let totalDelay = 0;\n if (oneByOneDelay) {\n totalDelay = oneByOneDelay * (count - index - 1);\n }\n\n // 添加后延迟\n const delayAfterValue = isFunction(delayAfter) ? delayAfter(graphic.context?.data?.[0], graphic, {}) : delayAfter;\n if (delayAfterValue > 0) {\n totalDelay += delayAfterValue as number;\n }\n\n if (totalDelay > 0) {\n animate.wait(totalDelay);\n }\n\n // 设置循环\n if (loop && (loop as number) > 0) {\n animate.loop(loop as number);\n }\n\n // 设置反弹\n if (bounce) {\n animate.bounce(true);\n }\n\n return animate;\n }\n\n private _handleRunAnimate(\n animate: IAnimate,\n custom: IAnimationCustomConstructor | IAnimationChannelInterpolator,\n customType: number, // 0: undefined, 1: class, 2: function\n from: Record<string, any> | null,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParameters: any,\n controlOptions: any,\n options: any,\n type: string,\n graphic: IGraphic\n ) {\n // 处理自定义动画\n if (custom && customType) {\n const customParams = this.resolveValue(customParameters, graphic, {});\n const objOptions = isFunction(options)\n ? options.call(\n null,\n (customParams && customParams.data?.[0]) ?? graphic.context?.data?.[0],\n graphic,\n customParams\n )\n : options;\n customParams.options = objOptions;\n customParams.controlOptions = controlOptions;\n if (customType === 1) {\n // 自定义动画构造器 - 创建自定义动画类\n this.createCustomAnimation(\n animate,\n custom as IAnimationCustomConstructor,\n from,\n props,\n duration as number,\n easing,\n customParams\n );\n } else if (customType === 2) {\n // 自定义插值器 - 创建自定义插值动画\n this.createCustomInterpolatorAnimation(\n animate,\n custom as IAnimationChannelInterpolator,\n props,\n duration as number,\n easing,\n customParams\n );\n }\n } else if (type === 'to') {\n animate.to(props, duration as number, easing);\n } else if (type === 'from') {\n animate.from(props, duration as number, easing);\n }\n }\n\n /**\n * 执行 Timeline 类型的动画\n */\n private executeTimelineItem(params: IAnimationTimeline, graphic: IGraphic, index: number, count: number): IAnimate {\n const { timeSlices, startTime = 0, loop, bounce, oneByOneDelay, priority, controlOptions } = params as any;\n\n // 如果设置了indexKey,则使用indexKey作为index\n const datum = graphic.context?.data?.[0];\n const indexKey = graphic.context?.indexKey;\n if (datum && indexKey) {\n index = datum[indexKey] ?? index;\n }\n\n // 创建动画实例\n const animate = graphic.animate() as unknown as IAnimate;\n animate.priority = priority;\n\n // 设置开始时间\n animate.startAt(startTime as number);\n animate.wait(index * oneByOneDelay);\n\n // 设置循环\n if (loop && (loop as number) > 0) {\n animate.loop(loop as number);\n }\n\n // 设置反弹\n if (bounce) {\n animate.bounce(true);\n }\n\n // 处理时间切片\n const slices = Array.isArray(timeSlices) ? timeSlices : [timeSlices];\n\n slices.forEach(slice => {\n this.applyTimeSliceToAnimate(slice, animate, graphic, controlOptions);\n });\n\n // 后等待\n if (oneByOneDelay) {\n animate.wait(oneByOneDelay * (count - index - 1));\n }\n\n return animate;\n }\n\n /**\n * 将时间切片应用到动画实例\n */\n private applyTimeSliceToAnimate(\n slice: IAnimationTimeSlice,\n animate: IAnimate,\n graphic: IGraphic,\n controlOptions: any\n ) {\n const { effects, duration = 300, delay = 0, delayAfter = 0 } = slice;\n\n // 解析时间参数\n // const durationValue = duration as number;\n const delayValue = isFunction(delay) ? delay(graphic.context?.data?.[0], graphic, {}) : delay;\n const delayAfterValue = isFunction(delayAfter) ? delayAfter(graphic.context?.data?.[0], graphic, {}) : delayAfter;\n\n // 添加延迟\n if (delayValue > 0) {\n animate.wait(delayValue);\n }\n\n // 处理动画效果\n const effectsArray = Array.isArray(effects) ? effects : [effects];\n\n effectsArray.forEach(effect => {\n const { type = 'fromTo', channel, customParameters, easing = 'linear', options } = effect;\n\n // 根据 channel 配置创建属性对象\n let parsedFromProps = null;\n let props = effect.to;\n let from = effect.from;\n if (!props) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n props = parsedFromProps.props;\n }\n if (!from) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n from = parsedFromProps.from;\n }\n const custom = effect.custom ?? AnimateExecutor.builtInAnimateMap[type];\n const customType = (effect as any).customType;\n this._handleRunAnimate(\n animate,\n custom,\n customType,\n from,\n props,\n duration as number,\n easing,\n customParameters,\n controlOptions,\n options,\n type,\n graphic\n );\n });\n\n // 添加后延迟\n if (delayAfterValue > 0) {\n animate.wait(delayAfterValue);\n }\n }\n\n /**\n * 创建自定义插值器动画\n */\n private createCustomInterpolatorAnimation(\n animate: IAnimate,\n interpolator: IAnimationChannelInterpolator,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParams: any\n ) {\n // 获取动画目标的当前属性作为起始值\n const from: Record<string, any> = {};\n const to = props;\n\n // 为每个属性填充起始值\n Object.keys(to).forEach(key => {\n from[key] = animate.target.getComputedAttribute(key);\n });\n\n animate.interpolateUpdateFunction = (from, to, ratio, step, target) => {\n interpolator(ratio, from, to, step, target, animate.target, customParams);\n };\n\n animate.to(props, duration, easing);\n }\n\n /**\n * 创建自定义动画类\n */\n private createCustomAnimation(\n animate: IAnimate,\n CustomAnimateConstructor: IAnimationCustomConstructor,\n from: Record<string, any> | null,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParams: any\n ) {\n // 获取动画目标的当前属性作为起始值\n // const from: Record<string, any> = {};\n const to = props;\n\n // // 为每个属性填充起始值\n // Object.keys(to).forEach(key => {\n // from[key] = animate.target.getComputedAttribute(key);\n // });\n\n // 实例化自定义动画类\n // 自定义动画自己去计算from\n const customAnimate = new CustomAnimateConstructor(from, to, duration, easing, customParams);\n\n // 播放自定义动画\n animate.play(customAnimate);\n }\n\n /**\n * 从 channel 配置创建属性对象\n */\n private createPropsFromChannel(\n channel: IAnimationChannelAttrs | IAnimationChannelAttributes | undefined,\n graphic: IGraphic\n ): { from: Record<string, any> | null; props: Record<string, any> } {\n const props: Record<string, any> = {};\n let from: Record<string, any> | null = null;\n\n if (!channel) {\n return {\n from,\n props\n };\n }\n\n if (!Array.isArray(channel)) {\n // 如果是对象,解析 from/to 配置\n Object.keys(channel).forEach(key => {\n const config = channel[key];\n if (config.to !== undefined) {\n if (typeof config.to === 'function') {\n props[key] = config.to((graphic.context as any)?.data?.[0], graphic, {});\n } else {\n props[key] = config.to;\n }\n }\n if (config.from !== undefined) {\n if (!from) {\n from = {};\n }\n if (typeof config.from === 'function') {\n from[key] = config.from((graphic.context as any)?.data?.[0], graphic, {});\n } else {\n from[key] = config.from;\n }\n }\n });\n } else {\n channel.forEach(key => {\n const value = graphic.context?.diffAttrs?.[key];\n if (value !== undefined) {\n props[key] = value;\n }\n });\n }\n\n return {\n from,\n props\n };\n }\n\n /**\n * 解析函数或值类型的配置项\n */\n private resolveValue<T>(value: MarkFunctionValueType<T> | undefined, graphic?: IGraphic, defaultValue?: T): T {\n if (value === undefined) {\n return defaultValue as T;\n }\n\n if (typeof value === 'function' && graphic) {\n return (value as MarkFunctionCallback<T>)((graphic.context as any)?.data?.[0], graphic, {});\n }\n\n return value as T;\n }\n\n executeItem(params: IAnimationConfig | IAnimationConfig[], graphic: IGraphic, index: number = 0, count: number = 1) {\n if (Array.isArray(params)) {\n return params.map(param => this._executeItem(param, graphic, index, count)).filter(Boolean);\n }\n return [this._executeItem(params, graphic, index, count)].filter(Boolean);\n }\n\n /**\n * 执行动画(具体执行到内部的单个图元)\n */\n _executeItem(params: IAnimationConfig, graphic: IGraphic, index: number = 0, count: number = 1): IAnimate | null {\n if (!graphic) {\n return null;\n }\n\n const isTimeline = 'timeSlices' in params;\n let animate: IAnimate | null = null;\n\n const parsedParams = this.parseParams(params, isTimeline);\n\n if (isTimeline) {\n // 处理 Timeline 类型的动画配置\n animate = this.executeTimelineItem(parsedParams as IAnimationTimeline, graphic, index, count);\n } else {\n // 处理 TypeConfig 类型的动画配置\n animate = this.executeTypeConfigItem(parsedParams as IAnimationTypeConfig, graphic, index, count);\n }\n\n // 跟踪动画以进行生命周期管理\n if (animate) {\n this._trackAnimation(animate);\n }\n\n return animate;\n }\n\n /**\n * 停止所有由该执行器管理的动画\n */\n stop(type?: 'start' | 'end' | Record<string, any>): void {\n // animate.stop会从数组里删除,所以需要while循环,不能forEach\n while (this._animates.length > 0) {\n const animate = this._animates.pop();\n animate?.stop(type);\n }\n\n // 清空动画实例数组\n this._animates = [];\n this._activeCount = 0;\n\n // 如果动画正在运行,触发结束回调\n if (this._started) {\n this._started = false;\n this.onEnd();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/executor/animate-executor.ts"],"names":[],"mappings":"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","file":"animate-executor.js","sourcesContent":["import type { IGraphic, EasingType, IAnimate } from '@visactor/vrender-core';\nimport type {\n IAnimationConfig,\n IAnimationTimeline,\n IAnimationTypeConfig,\n MarkFunctionCallback,\n MarkFunctionValueType,\n IAnimationTimeSlice,\n IAnimationChannelAttrs,\n IAnimationChannelAttributes,\n IAnimationCustomConstructor,\n IAnimationChannelInterpolator\n} from './executor';\nimport { cloneDeep, isArray, isFunction } from '@visactor/vutils';\n\ninterface IAnimateExecutor {\n execute: (params: IAnimationConfig) => void;\n executeItem: (params: IAnimationConfig, graphic: IGraphic, index?: number) => IAnimate[];\n onStart: (cb?: () => void) => void;\n onEnd: (cb?: () => void) => void;\n}\n\nexport class AnimateExecutor implements IAnimateExecutor {\n static builtInAnimateMap: Record<string, IAnimationCustomConstructor> = {};\n\n static registerBuiltInAnimate(name: string, animate: IAnimationCustomConstructor) {\n AnimateExecutor.builtInAnimateMap[name] = animate;\n }\n\n declare _target: IGraphic;\n\n // 所有动画实例\n private _animates: IAnimate[] = [];\n\n // 动画开始回调\n private _startCallbacks: (() => void)[] = [];\n // 动画结束回调\n private _endCallbacks: (() => void)[] = [];\n\n // 是否已经开始动画\n private _started: boolean = false;\n\n // 当前正在运行的动画数量\n private _activeCount: number = 0;\n\n constructor(target: IGraphic) {\n this._target = target;\n }\n\n /**\n * 注册一个回调,当动画开始时调用\n */\n onStart(cb?: () => void): void {\n if (cb) {\n this._startCallbacks.push(cb);\n\n // 如果动画已经开始,立即调用回调\n if (this._started && this._activeCount > 0) {\n cb();\n }\n } else {\n this._startCallbacks.forEach(cb => {\n cb();\n });\n }\n }\n\n /**\n * 注册一个回调,当所有动画结束时调用\n */\n onEnd(cb?: () => void): void {\n if (cb) {\n this._endCallbacks.push(cb);\n } else {\n this._endCallbacks.forEach(cb => {\n cb();\n });\n }\n }\n\n /**\n * 跟踪动画并附加生命周期钩子\n */\n private _trackAnimation(animate: IAnimate): void {\n this._animates.push(animate);\n this._activeCount++;\n\n // 如果这是第一个正在运行的动画,触发onStart回调\n if (this._activeCount === 1 && !this._started) {\n this._started = true;\n this.onStart();\n }\n\n // 处理动画完成\n animate.onEnd(() => {\n this._activeCount--;\n\n // 从跟踪的动画中移除\n const index = this._animates.indexOf(animate);\n if (index >= 0) {\n this._animates.splice(index, 1);\n }\n\n // 如果所有动画都已完成,触发onEnd回调\n if (this._activeCount === 0 && this._started) {\n this._started = false;\n this.onEnd();\n }\n });\n }\n\n parseParams(params: IAnimationConfig, isTimeline: boolean, child?: IGraphic): IAnimationConfig {\n const totalTime = this.resolveValue(params.totalTime, undefined, undefined);\n const startTime = this.resolveValue(params.startTime, undefined, 0);\n\n // execute只在mark层面调用,所以性能影响可以忽略\n // TODO 存在性能问题,如果后续调用频繁,需要重新修改\n const parsedParams: Record<string, any> = { ...params };\n parsedParams.oneByOneDelay = 0;\n parsedParams.startTime = startTime;\n parsedParams.totalTime = totalTime;\n\n const oneByOne = this.resolveValue(params.oneByOne, child, false);\n\n if (isTimeline) {\n const timeSlices = (parsedParams as IAnimationTimeline).timeSlices;\n if (!isArray(timeSlices)) {\n (parsedParams as IAnimationTimeline).timeSlices = [timeSlices];\n }\n let sliceTime = 0;\n ((parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]) = (\n (parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]\n ).map(slice => {\n const delay = this.resolveValue(slice.delay, child, 0);\n const delayAfter = this.resolveValue(slice.delayAfter, child, 0);\n const duration = this.resolveValue(slice.duration, child, 300);\n sliceTime += delay + duration + delayAfter;\n return {\n ...slice,\n delay,\n delayAfter,\n duration\n };\n });\n let oneByOneDelay = 0;\n if (oneByOne) {\n oneByOneDelay = typeof oneByOne === 'number' ? (oneByOne as number) : oneByOne ? sliceTime : 0;\n }\n parsedParams.oneByOneDelay = oneByOneDelay;\n\n let scale = 1;\n if (totalTime) {\n const _totalTime = sliceTime + oneByOneDelay * (this._target.count - 2);\n scale = totalTime ? totalTime / _totalTime : 1;\n }\n ((parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]) = (\n (parsedParams as IAnimationTimeline).timeSlices as IAnimationTimeSlice[]\n ).map(slice => {\n let effects = slice.effects;\n if (!Array.isArray(effects)) {\n effects = [effects];\n }\n return {\n ...slice,\n delay: (slice.delay as number) * scale,\n delayAfter: (slice.delayAfter as number) * scale,\n duration: (slice.duration as number) * scale,\n effects: effects.map(effect => {\n const custom = effect.custom ?? AnimateExecutor.builtInAnimateMap[(effect.type as any) ?? 'fromTo'];\n const customType =\n custom && isFunction(custom) ? (/^class\\s/.test(Function.prototype.toString.call(custom)) ? 1 : 2) : 0;\n return {\n ...effect,\n custom,\n customType\n };\n })\n };\n });\n parsedParams.oneByOneDelay = oneByOneDelay * scale;\n (parsedParams as IAnimationTimeline).startTime = startTime * scale;\n } else {\n const delay = this.resolveValue((params as IAnimationTypeConfig).delay, child, 0);\n const delayAfter = this.resolveValue((params as IAnimationTypeConfig).delayAfter, child, 0);\n const duration = this.resolveValue((params as IAnimationTypeConfig).duration, child, 300);\n const loopTime = delay + delayAfter + duration;\n\n let oneByOneDelay = 0;\n if (oneByOne) {\n oneByOneDelay = typeof oneByOne === 'number' ? (oneByOne as number) : oneByOne ? loopTime : 0;\n }\n parsedParams.oneByOneDelay = oneByOneDelay;\n parsedParams.custom =\n (params as IAnimationTypeConfig).custom ??\n AnimateExecutor.builtInAnimateMap[(params as IAnimationTypeConfig).type ?? 'fromTo'];\n\n const customType =\n parsedParams.custom && isFunction(parsedParams.custom)\n ? /^class\\s/.test(Function.prototype.toString.call(parsedParams.custom))\n ? 1\n : 2\n : 0;\n parsedParams.customType = customType;\n\n if (totalTime) {\n const _totalTime = delay + delayAfter + duration + oneByOneDelay * (this._target.count - 2);\n const scale = totalTime ? totalTime / _totalTime : 1;\n parsedParams.delay = delay * scale;\n parsedParams.delayAfter = delayAfter * scale;\n parsedParams.duration = duration * scale;\n parsedParams.oneByOneDelay = oneByOneDelay * scale;\n (parsedParams as IAnimationTypeConfig).startTime = startTime;\n }\n }\n\n return parsedParams;\n }\n\n execute(params: IAnimationConfig | IAnimationConfig[]) {\n if (Array.isArray(params)) {\n params.forEach(param => this._execute(param));\n } else {\n this._execute(params);\n }\n }\n\n /**\n * 执行动画,针对一组元素\n */\n _execute(params: IAnimationConfig) {\n if (params.selfOnly) {\n return this._executeItem(params, this._target, 0, 1);\n }\n\n // 判断是否为timeline配置\n const isTimeline = 'timeSlices' in params;\n\n // 筛选符合条件的子图元\n let filteredChildren: IGraphic[];\n\n // 如果设置了partitioner,则进行筛选\n if (isTimeline && params.partitioner) {\n filteredChildren = (filteredChildren ?? (this._target.getChildren() as IGraphic[])).filter(child => {\n return (params as IAnimationTimeline).partitioner((child.context as any)?.data?.[0], child, {});\n });\n }\n\n // 如果需要排序,则进行排序\n if (isTimeline && (params as IAnimationTimeline).sort) {\n filteredChildren = filteredChildren ?? (this._target.getChildren() as IGraphic[]);\n filteredChildren.sort((a, b) => {\n return (params as IAnimationTimeline).sort(\n (a.context as any)?.data?.[0],\n (b.context as any)?.data?.[0],\n a,\n b,\n {}\n );\n });\n }\n\n //\n\n const cb = isTimeline\n ? (child: IGraphic, index: number, count: number) => {\n const parsedParams = this.parseParams(params, isTimeline, child);\n // 执行单个图元的timeline动画\n const animate = this.executeTimelineItem(parsedParams as IAnimationTimeline, child, index, count);\n if (animate) {\n this._trackAnimation(animate);\n }\n }\n : (child: IGraphic, index: number, count: number) => {\n const parsedParams = this.parseParams(params, isTimeline, child);\n // 执行单个图元的config动画\n const animate = this.executeTypeConfigItem(parsedParams as IAnimationTypeConfig, child, index, count);\n if (animate) {\n this._trackAnimation(animate);\n }\n };\n\n // 执行每个图元的动画\n if (filteredChildren) {\n filteredChildren.forEach((child, index) => cb(child, index, filteredChildren.length));\n } else if (this._target.count <= 1) {\n cb(this._target, 0, 1);\n } else {\n this._target.forEachChildren((child, index) => cb(child as IGraphic, index, this._target.count - 1));\n }\n\n return;\n }\n\n /**\n * 执行 TypeConfig 类型的动画\n */\n private executeTypeConfigItem(\n params: IAnimationTypeConfig,\n graphic: IGraphic,\n index: number,\n count: number\n ): IAnimate {\n const {\n type = 'fromTo',\n channel,\n customParameters,\n easing = 'linear',\n delay = 0,\n delayAfter = 0,\n duration = 300,\n startTime = 0,\n oneByOneDelay = 0,\n loop,\n bounce,\n priority = 0,\n options,\n custom,\n customType, // 0: undefined, 1: class, 2: function\n controlOptions\n } = params as any;\n\n // 创建动画实例\n const animate = graphic.animate() as unknown as IAnimate;\n animate.priority = priority;\n\n const delayValue = isFunction(delay) ? delay(graphic.context?.data?.[0], graphic, {}) : delay;\n\n // 如果设置了indexKey,则使用indexKey作为index\n const datum = graphic.context?.data?.[0];\n const indexKey = graphic.context?.indexKey;\n if (datum && indexKey) {\n index = datum[indexKey] ?? index;\n }\n\n // 设置开始时间\n animate.startAt(startTime as number);\n const wait = index * oneByOneDelay + delayValue;\n wait > 0 && animate.wait(wait);\n\n // 放到startAt中,否则label无法确定主图元何时开始\n // // 添加延迟\n // if (delayValue > 0) {\n // animate.wait(delayValue);\n // }\n\n // 根据 channel 配置创建属性对象\n // 根据 channel 配置创建属性对象\n let parsedFromProps = null;\n let props = params.to;\n let from = params.from;\n if (!props) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n props = parsedFromProps.props;\n }\n if (!from) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n from = parsedFromProps.from;\n }\n\n this._handleRunAnimate(\n animate,\n custom,\n customType,\n from,\n props,\n duration as number,\n easing,\n customParameters,\n controlOptions,\n options,\n type,\n graphic\n );\n\n let totalDelay = 0;\n if (oneByOneDelay) {\n totalDelay = oneByOneDelay * (count - index - 1);\n }\n\n // 添加后延迟\n const delayAfterValue = isFunction(delayAfter) ? delayAfter(graphic.context?.data?.[0], graphic, {}) : delayAfter;\n if (delayAfterValue > 0) {\n totalDelay += delayAfterValue as number;\n }\n\n if (totalDelay > 0) {\n animate.wait(totalDelay);\n }\n\n // 设置循环\n if (loop && (loop as number) > 0) {\n animate.loop(loop as number);\n }\n\n // 设置反弹\n if (bounce) {\n animate.bounce(true);\n }\n\n return animate;\n }\n\n private _handleRunAnimate(\n animate: IAnimate,\n custom: IAnimationCustomConstructor | IAnimationChannelInterpolator,\n customType: number, // 0: undefined, 1: class, 2: function\n from: Record<string, any> | null,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParameters: any,\n controlOptions: any,\n options: any,\n type: string,\n graphic: IGraphic\n ) {\n // 处理自定义动画\n if (custom && customType) {\n const customParams = this.resolveValue(customParameters, graphic, {\n width: graphic.stage.width,\n height: graphic.stage.height\n });\n const objOptions = isFunction(options)\n ? options.call(\n null,\n (customParams && customParams.data?.[0]) ?? graphic.context?.data?.[0],\n graphic,\n customParams\n )\n : options;\n customParams.options = objOptions;\n customParams.controlOptions = controlOptions;\n if (customType === 1) {\n // 自定义动画构造器 - 创建自定义动画类\n this.createCustomAnimation(\n animate,\n custom as IAnimationCustomConstructor,\n from,\n props,\n duration as number,\n easing,\n customParams\n );\n } else if (customType === 2) {\n // 自定义插值器 - 创建自定义插值动画\n this.createCustomInterpolatorAnimation(\n animate,\n custom as IAnimationChannelInterpolator,\n props,\n duration as number,\n easing,\n customParams\n );\n }\n } else if (type === 'to') {\n animate.to(props, duration as number, easing);\n } else if (type === 'from') {\n animate.from(props, duration as number, easing);\n }\n }\n\n /**\n * 执行 Timeline 类型的动画\n */\n private executeTimelineItem(params: IAnimationTimeline, graphic: IGraphic, index: number, count: number): IAnimate {\n const { timeSlices, startTime = 0, loop, bounce, oneByOneDelay, priority, controlOptions } = params as any;\n\n // 如果设置了indexKey,则使用indexKey作为index\n const datum = graphic.context?.data?.[0];\n const indexKey = graphic.context?.indexKey;\n if (datum && indexKey) {\n index = datum[indexKey] ?? index;\n }\n\n // 创建动画实例\n const animate = graphic.animate() as unknown as IAnimate;\n animate.priority = priority;\n\n // 设置开始时间\n animate.startAt(startTime as number);\n animate.wait(index * oneByOneDelay);\n\n // 设置循环\n if (loop && (loop as number) > 0) {\n animate.loop(loop as number);\n }\n\n // 设置反弹\n if (bounce) {\n animate.bounce(true);\n }\n\n // 处理时间切片\n const slices = Array.isArray(timeSlices) ? timeSlices : [timeSlices];\n\n slices.forEach(slice => {\n this.applyTimeSliceToAnimate(slice, animate, graphic, controlOptions);\n });\n\n // 后等待\n if (oneByOneDelay) {\n animate.wait(oneByOneDelay * (count - index - 1));\n }\n\n return animate;\n }\n\n /**\n * 将时间切片应用到动画实例\n */\n private applyTimeSliceToAnimate(\n slice: IAnimationTimeSlice,\n animate: IAnimate,\n graphic: IGraphic,\n controlOptions: any\n ) {\n const { effects, duration = 300, delay = 0, delayAfter = 0 } = slice;\n\n // 解析时间参数\n // const durationValue = duration as number;\n const delayValue = isFunction(delay) ? delay(graphic.context?.data?.[0], graphic, {}) : delay;\n const delayAfterValue = isFunction(delayAfter) ? delayAfter(graphic.context?.data?.[0], graphic, {}) : delayAfter;\n\n // 添加延迟\n if (delayValue > 0) {\n animate.wait(delayValue);\n }\n\n // 处理动画效果\n const effectsArray = Array.isArray(effects) ? effects : [effects];\n\n effectsArray.forEach(effect => {\n const { type = 'fromTo', channel, customParameters, easing = 'linear', options } = effect;\n\n // 根据 channel 配置创建属性对象\n let parsedFromProps = null;\n let props = effect.to;\n let from = effect.from;\n if (!props) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n props = parsedFromProps.props;\n }\n if (!from) {\n if (!parsedFromProps) {\n parsedFromProps = this.createPropsFromChannel(channel, graphic);\n }\n from = parsedFromProps.from;\n }\n const custom = effect.custom ?? AnimateExecutor.builtInAnimateMap[type];\n const customType = (effect as any).customType;\n this._handleRunAnimate(\n animate,\n custom,\n customType,\n from,\n props,\n duration as number,\n easing,\n customParameters,\n controlOptions,\n options,\n type,\n graphic\n );\n });\n\n // 添加后延迟\n if (delayAfterValue > 0) {\n animate.wait(delayAfterValue);\n }\n }\n\n /**\n * 创建自定义插值器动画\n */\n private createCustomInterpolatorAnimation(\n animate: IAnimate,\n interpolator: IAnimationChannelInterpolator,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParams: any\n ) {\n // 获取动画目标的当前属性作为起始值\n const from: Record<string, any> = {};\n const to = props;\n\n // 为每个属性填充起始值\n Object.keys(to).forEach(key => {\n from[key] = animate.target.getComputedAttribute(key);\n });\n\n animate.interpolateUpdateFunction = (from, to, ratio, step, target) => {\n interpolator(ratio, from, to, step, target, animate.target, customParams);\n };\n\n animate.to(props, duration, easing);\n }\n\n /**\n * 创建自定义动画类\n */\n private createCustomAnimation(\n animate: IAnimate,\n CustomAnimateConstructor: IAnimationCustomConstructor,\n from: Record<string, any> | null,\n props: Record<string, any>,\n duration: number,\n easing: EasingType,\n customParams: any\n ) {\n // 获取动画目标的当前属性作为起始值\n // const from: Record<string, any> = {};\n const to = props;\n\n // // 为每个属性填充起始值\n // Object.keys(to).forEach(key => {\n // from[key] = animate.target.getComputedAttribute(key);\n // });\n\n // 实例化自定义动画类\n // 自定义动画自己去计算from\n const customAnimate = new CustomAnimateConstructor(from, to, duration, easing, customParams);\n\n // 播放自定义动画\n animate.play(customAnimate);\n }\n\n /**\n * 从 channel 配置创建属性对象\n */\n private createPropsFromChannel(\n channel: IAnimationChannelAttrs | IAnimationChannelAttributes | undefined,\n graphic: IGraphic\n ): { from: Record<string, any> | null; props: Record<string, any> } {\n const props: Record<string, any> = {};\n let from: Record<string, any> | null = null;\n\n if (!channel) {\n return {\n from,\n props\n };\n }\n\n if (!Array.isArray(channel)) {\n // 如果是对象,解析 from/to 配置\n Object.keys(channel).forEach(key => {\n const config = channel[key];\n if (config.to !== undefined) {\n if (typeof config.to === 'function') {\n props[key] = config.to((graphic.context as any)?.data?.[0], graphic, {});\n } else {\n props[key] = config.to;\n }\n }\n if (config.from !== undefined) {\n if (!from) {\n from = {};\n }\n if (typeof config.from === 'function') {\n from[key] = config.from((graphic.context as any)?.data?.[0], graphic, {});\n } else {\n from[key] = config.from;\n }\n }\n });\n } else {\n channel.forEach(key => {\n const value = graphic.context?.diffAttrs?.[key];\n if (value !== undefined) {\n props[key] = value;\n }\n });\n }\n\n return {\n from,\n props\n };\n }\n\n /**\n * 解析函数或值类型的配置项\n */\n private resolveValue<T>(value: MarkFunctionValueType<T> | undefined, graphic?: IGraphic, defaultValue?: T): T {\n if (value === undefined) {\n return defaultValue as T;\n }\n\n if (typeof value === 'function' && graphic) {\n return (value as MarkFunctionCallback<T>)((graphic.context as any)?.data?.[0], graphic, {});\n }\n\n return value as T;\n }\n\n executeItem(params: IAnimationConfig | IAnimationConfig[], graphic: IGraphic, index: number = 0, count: number = 1) {\n if (Array.isArray(params)) {\n return params.map(param => this._executeItem(param, graphic, index, count)).filter(Boolean);\n }\n return [this._executeItem(params, graphic, index, count)].filter(Boolean);\n }\n\n /**\n * 执行动画(具体执行到内部的单个图元)\n */\n _executeItem(params: IAnimationConfig, graphic: IGraphic, index: number = 0, count: number = 1): IAnimate | null {\n if (!graphic) {\n return null;\n }\n\n const isTimeline = 'timeSlices' in params;\n let animate: IAnimate | null = null;\n\n const parsedParams = this.parseParams(params, isTimeline);\n\n if (isTimeline) {\n // 处理 Timeline 类型的动画配置\n animate = this.executeTimelineItem(parsedParams as IAnimationTimeline, graphic, index, count);\n } else {\n // 处理 TypeConfig 类型的动画配置\n animate = this.executeTypeConfigItem(parsedParams as IAnimationTypeConfig, graphic, index, count);\n }\n\n // 跟踪动画以进行生命周期管理\n if (animate) {\n this._trackAnimation(animate);\n }\n\n return animate;\n }\n\n /**\n * 停止所有由该执行器管理的动画\n */\n stop(type?: 'start' | 'end' | Record<string, any>): void {\n // animate.stop会从数组里删除,所以需要while循环,不能forEach\n while (this._animates.length > 0) {\n const animate = this._animates.pop();\n animate?.stop(type);\n }\n\n // 清空动画实例数组\n this._animates = [];\n this._activeCount = 0;\n\n // 如果动画正在运行,触发结束回调\n if (this._started) {\n this._started = false;\n this.onEnd();\n }\n }\n}\n"]}
|
|
@@ -18,6 +18,8 @@ export declare class InterpolateUpdateStore {
|
|
|
18
18
|
height: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
19
19
|
x: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
20
20
|
y: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
21
|
+
dx: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
22
|
+
dy: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
21
23
|
angle: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
22
24
|
scaleX: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
|
23
25
|
scaleY: (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => void;
|
package/es/interpolate/store.js
CHANGED
|
@@ -40,6 +40,12 @@ export class InterpolateUpdateStore {
|
|
|
40
40
|
}, this.y = (key, from, to, ratio, step, target) => {
|
|
41
41
|
target.attribute.y = interpolateNumber(from, to, ratio), target.addUpdateBoundTag(),
|
|
42
42
|
target.addUpdatePositionTag();
|
|
43
|
+
}, this.dx = (key, from, to, ratio, step, target) => {
|
|
44
|
+
target.attribute.dx = interpolateNumber(from, to, ratio), target.addUpdateBoundTag(),
|
|
45
|
+
target.addUpdatePositionTag();
|
|
46
|
+
}, this.dy = (key, from, to, ratio, step, target) => {
|
|
47
|
+
target.attribute.dy = interpolateNumber(from, to, ratio), target.addUpdateBoundTag(),
|
|
48
|
+
target.addUpdatePositionTag();
|
|
43
49
|
}, this.angle = (key, from, to, ratio, step, target) => {
|
|
44
50
|
target.attribute.angle = interpolateNumber(from, to, ratio), target.addUpdateBoundTag(),
|
|
45
51
|
target.addUpdatePositionTag();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interpolate/store.ts"],"names":[],"mappings":"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","file":"store.js","sourcesContent":["import type { IGraphic, IStep } from '@visactor/vrender-core';\nimport { interpolateColor, interpolatePureColorArrayToStr, pointsInterpolation } from '@visactor/vrender-core';\nimport { interpolateNumber } from './number';\nimport type { IPointLike } from '@visactor/vutils';\n\n// 直接设置,触发 隐藏类(Hidden Class)优化:\n/**\n *\nconst a = { type: 1 };\nconst ITERATIONS = 1e7; // 测试次数\n\n// 动态生成 keys 数组(确保引擎无法静态推断 key)\nconst keys = [];\nfor (let i = 0; i < ITERATIONS; i++) {\n // 通过条件确保 key 动态变化(但实际始终为 'type',避免属性缺失的开销)\n keys.push(Math.random() < 0 ? 'other' : 'type');\n}\n\n// 测试字面量访问\nfunction testLiteral() {\n let sum = 0;\n for (let i = 0; i < ITERATIONS; i++) {\n const key = keys[i]; // 读取 key(与动态测试完全一致)\n sum += a.type; // 差异仅在此处:使用字面量访问\n }\n return sum;\n}\n\n// 测试变量动态访问\nfunction testDynamic() {\n let sum = 0;\n for (let i = 0; i < ITERATIONS; i++) {\n const key = keys[i]; // 读取 key(与字面量测试完全一致)\n sum += a[key]; // 差异仅在此处:使用变量访问\n }\n return sum;\n}\n\n// 预热(避免 JIT 编译影响)\ntestLiteral();\ntestDynamic();\n\n// 正式测试\nconsole.time('literal');\ntestLiteral();\nconsole.timeEnd('literal');\n\nconsole.time('dynamic');\ntestDynamic();\nconsole.timeEnd('dynamic');\n\n\n// out:\n// literal: 7.1259765625 ms\n// dynamic: 9.322998046875 ms\n */\n\nexport class InterpolateUpdateStore {\n opacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.opacity = interpolateNumber(from, to, ratio);\n };\n baseOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).baseOpacity = interpolateNumber(from, to, ratio);\n };\n fillOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.fillOpacity = interpolateNumber(from, to, ratio);\n };\n strokeOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.strokeOpacity = interpolateNumber(from, to, ratio);\n };\n zIndex = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.zIndex = interpolateNumber(from, to, ratio);\n };\n backgroundOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.backgroundOpacity = interpolateNumber(from, to, ratio);\n };\n shadowOffsetX = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowOffsetX = interpolateNumber(from, to, ratio);\n };\n shadowOffsetY = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowOffsetY = interpolateNumber(from, to, ratio);\n };\n shadowBlur = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowBlur = interpolateNumber(from, to, ratio);\n };\n fill = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.fill = interpolateColor(from, to, ratio, false) as any;\n };\n fillPure = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.fill = step.fromParsedProps.fill\n ? (interpolatePureColorArrayToStr(step.fromParsedProps.fill, step.toParsedProps.fill, ratio) as any)\n : step.toParsedProps.fill;\n };\n stroke = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.stroke = interpolateColor(from, to, ratio, false);\n };\n strokePure = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.stroke = step.fromParsedProps.stroke\n ? (interpolatePureColorArrayToStr(step.fromParsedProps.stroke, step.toParsedProps.stroke, ratio) as any)\n : step.toParsedProps.stroke;\n };\n\n // 需要更新Bounds\n width = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).width = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n height = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).height = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n x = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.x = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n y = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.y = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n angle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.angle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n scaleX = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.scaleX = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n scaleY = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.scaleY = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n lineWidth = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.lineWidth = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n startAngle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).startAngle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n endAngle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).endAngle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n radius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).radius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n outerRadius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).outerRadius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n innerRadius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).innerRadius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n size = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).size = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n points = (key: string, from: IPointLike[], to: IPointLike[], ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).points = pointsInterpolation(from, to, ratio);\n target.addUpdateBoundTag();\n };\n}\n\nexport const interpolateUpdateStore = new InterpolateUpdateStore();\n\nexport function commonInterpolateUpdate(key: string, from: any, to: any, ratio: number, step: IStep, target: IGraphic) {\n if (Number.isFinite(to) && Number.isFinite(from)) {\n (target.attribute as any)[key] = from + (to - from) * ratio;\n return true;\n } else if (Array.isArray(to) && Array.isArray(from) && to.length === from.length) {\n const nextList = [];\n let valid = true;\n for (let i = 0; i < to.length; i++) {\n const v = from[i];\n const val = v + (to[i] - v) * ratio;\n if (!Number.isFinite(val)) {\n valid = false;\n break;\n }\n nextList.push(val);\n }\n if (valid) {\n (target.attribute as any)[key] = nextList;\n }\n return true;\n }\n return false;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/interpolate/store.ts"],"names":[],"mappings":"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","file":"store.js","sourcesContent":["import type { IGraphic, IStep } from '@visactor/vrender-core';\nimport { interpolateColor, interpolatePureColorArrayToStr, pointsInterpolation } from '@visactor/vrender-core';\nimport { interpolateNumber } from './number';\nimport type { IPointLike } from '@visactor/vutils';\n\n// 直接设置,触发 隐藏类(Hidden Class)优化:\n/**\n *\nconst a = { type: 1 };\nconst ITERATIONS = 1e7; // 测试次数\n\n// 动态生成 keys 数组(确保引擎无法静态推断 key)\nconst keys = [];\nfor (let i = 0; i < ITERATIONS; i++) {\n // 通过条件确保 key 动态变化(但实际始终为 'type',避免属性缺失的开销)\n keys.push(Math.random() < 0 ? 'other' : 'type');\n}\n\n// 测试字面量访问\nfunction testLiteral() {\n let sum = 0;\n for (let i = 0; i < ITERATIONS; i++) {\n const key = keys[i]; // 读取 key(与动态测试完全一致)\n sum += a.type; // 差异仅在此处:使用字面量访问\n }\n return sum;\n}\n\n// 测试变量动态访问\nfunction testDynamic() {\n let sum = 0;\n for (let i = 0; i < ITERATIONS; i++) {\n const key = keys[i]; // 读取 key(与字面量测试完全一致)\n sum += a[key]; // 差异仅在此处:使用变量访问\n }\n return sum;\n}\n\n// 预热(避免 JIT 编译影响)\ntestLiteral();\ntestDynamic();\n\n// 正式测试\nconsole.time('literal');\ntestLiteral();\nconsole.timeEnd('literal');\n\nconsole.time('dynamic');\ntestDynamic();\nconsole.timeEnd('dynamic');\n\n\n// out:\n// literal: 7.1259765625 ms\n// dynamic: 9.322998046875 ms\n */\n\nexport class InterpolateUpdateStore {\n opacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.opacity = interpolateNumber(from, to, ratio);\n };\n baseOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).baseOpacity = interpolateNumber(from, to, ratio);\n };\n fillOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.fillOpacity = interpolateNumber(from, to, ratio);\n };\n strokeOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.strokeOpacity = interpolateNumber(from, to, ratio);\n };\n zIndex = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.zIndex = interpolateNumber(from, to, ratio);\n };\n backgroundOpacity = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.backgroundOpacity = interpolateNumber(from, to, ratio);\n };\n shadowOffsetX = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowOffsetX = interpolateNumber(from, to, ratio);\n };\n shadowOffsetY = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowOffsetY = interpolateNumber(from, to, ratio);\n };\n shadowBlur = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.shadowBlur = interpolateNumber(from, to, ratio);\n };\n fill = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.fill = interpolateColor(from, to, ratio, false) as any;\n };\n fillPure = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.fill = step.fromParsedProps.fill\n ? (interpolatePureColorArrayToStr(step.fromParsedProps.fill, step.toParsedProps.fill, ratio) as any)\n : step.toParsedProps.fill;\n };\n stroke = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.stroke = interpolateColor(from, to, ratio, false);\n };\n strokePure = (\n key: string,\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number,\n step: IStep,\n target: IGraphic\n ) => {\n target.attribute.stroke = step.fromParsedProps.stroke\n ? (interpolatePureColorArrayToStr(step.fromParsedProps.stroke, step.toParsedProps.stroke, ratio) as any)\n : step.toParsedProps.stroke;\n };\n\n // 需要更新Bounds\n width = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).width = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n height = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).height = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n x = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.x = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n y = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.y = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n dx = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.dx = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n dy = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.dy = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n angle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.angle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n scaleX = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.scaleX = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n scaleY = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.scaleY = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n target.addUpdatePositionTag();\n };\n lineWidth = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n target.attribute.lineWidth = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n startAngle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).startAngle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n endAngle = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).endAngle = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n radius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).radius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n outerRadius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).outerRadius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n innerRadius = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).innerRadius = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n size = (key: string, from: number, to: number, ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).size = interpolateNumber(from, to, ratio);\n target.addUpdateBoundTag();\n };\n points = (key: string, from: IPointLike[], to: IPointLike[], ratio: number, step: IStep, target: IGraphic) => {\n (target.attribute as any).points = pointsInterpolation(from, to, ratio);\n target.addUpdateBoundTag();\n };\n}\n\nexport const interpolateUpdateStore = new InterpolateUpdateStore();\n\nexport function commonInterpolateUpdate(key: string, from: any, to: any, ratio: number, step: IStep, target: IGraphic) {\n if (Number.isFinite(to) && Number.isFinite(from)) {\n (target.attribute as any)[key] = from + (to - from) * ratio;\n return true;\n } else if (Array.isArray(to) && Array.isArray(from) && to.length === from.length) {\n const nextList = [];\n let valid = true;\n for (let i = 0; i < to.length; i++) {\n const v = from[i];\n const val = v + (to[i] - v) * ratio;\n if (!Number.isFinite(val)) {\n valid = false;\n break;\n }\n nextList.push(val);\n }\n if (valid) {\n (target.attribute as any)[key] = nextList;\n }\n return true;\n }\n return false;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vrender-animate",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "cjs/index.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
],
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@visactor/vutils": "1.0.6",
|
|
16
|
-
"@visactor/vrender-core": "1.0.
|
|
16
|
+
"@visactor/vrender-core": "1.0.3"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@rushstack/eslint-patch": "~1.1.4",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"typescript": "4.9.5",
|
|
31
31
|
"cross-env": "^7.0.3",
|
|
32
32
|
"@internal/bundler": "0.0.1",
|
|
33
|
-
"@internal/
|
|
34
|
-
"@internal/
|
|
33
|
+
"@internal/ts-config": "0.0.1",
|
|
34
|
+
"@internal/eslint-config": "0.0.1"
|
|
35
35
|
},
|
|
36
36
|
"keywords": [
|
|
37
37
|
"VisActor",
|