UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

77 lines (76 loc) 2.81 kB
import { isArray, each, keys, filter, indexOf } from "../../../zrender/lib/core/util.mjs"; import { ELEMENT_ANIMATABLE_PROPS } from "./customGraphicTransition.mjs"; import { getAnimationConfig } from "./basicTransition.mjs"; import { makeInner } from "../util/model.mjs"; var getStateToRestore = makeInner(); var KEYFRAME_EXCLUDE_KEYS = ["percent", "easing", "shape", "style", "extra"]; function stopPreviousKeyframeAnimationAndRestore(el) { el.stopAnimation("keyframe"); el.attr(getStateToRestore(el)); } function applyKeyframeAnimation(el, animationOpts, animatableModel) { if (!animatableModel.isAnimationEnabled() || !animationOpts) { return; } if (isArray(animationOpts)) { each(animationOpts, function(singleAnimationOpts) { applyKeyframeAnimation(el, singleAnimationOpts, animatableModel); }); return; } var keyframes = animationOpts.keyframes; var duration = animationOpts.duration; if (animatableModel && duration == null) { var config = getAnimationConfig("enter", animatableModel, 0); duration = config && config.duration; } if (!keyframes || !duration) { return; } var stateToRestore = getStateToRestore(el); each(ELEMENT_ANIMATABLE_PROPS, function(targetPropName) { if (targetPropName && !el[targetPropName]) { return; } var animator; keyframes.sort(function(a, b) { return a.percent - b.percent; }); each(keyframes, function(kf) { var animators = el.animators; var kfValues = targetPropName ? kf[targetPropName] : kf; if (!kfValues) { return; } var propKeys = keys(kfValues); if (!targetPropName) { propKeys = filter(propKeys, function(key) { return indexOf(KEYFRAME_EXCLUDE_KEYS, key) < 0; }); } if (!propKeys.length) { return; } if (!animator) { animator = el.animate(targetPropName, animationOpts.loop, true); animator.scope = "keyframe"; } for (var i = 0; i < animators.length; i++) { if (animators[i] !== animator && animators[i].targetName === animator.targetName) { animators[i].stopTracks(propKeys); } } targetPropName && (stateToRestore[targetPropName] = stateToRestore[targetPropName] || {}); var savedTarget = targetPropName ? stateToRestore[targetPropName] : stateToRestore; each(propKeys, function(key) { savedTarget[key] = ((targetPropName ? el[targetPropName] : el) || {})[key]; }); animator.whenWithKeys(duration * kf.percent, kfValues, propKeys, kf.easing); }); if (!animator) { return; } animator.delay(animationOpts.delay || 0).duration(duration).start(animationOpts.easing); }); } export { applyKeyframeAnimation, stopPreviousKeyframeAnimationAndRestore };