cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
77 lines (76 loc) • 2.81 kB
JavaScript
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 };