cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
141 lines (140 loc) • 4.81 kB
JavaScript
import { isFunction, isObject, retrieve2 } from "../../../zrender/lib/core/util.mjs";
import { makeInner } from "../util/model.mjs";
var transitionStore = makeInner();
function getAnimationConfig(animationType, animatableModel, dataIndex, extraOpts, extraDelayParams) {
var animationPayload;
if (animatableModel && animatableModel.ecModel) {
var updatePayload = animatableModel.ecModel.getUpdatePayload();
animationPayload = updatePayload && updatePayload.animation;
}
var animationEnabled = animatableModel && animatableModel.isAnimationEnabled();
var isUpdate = animationType === "update";
if (animationEnabled) {
var duration = void 0;
var easing = void 0;
var delay = void 0;
if (extraOpts) {
duration = retrieve2(extraOpts.duration, 200);
easing = retrieve2(extraOpts.easing, "cubicOut");
delay = 0;
} else {
duration = animatableModel.getShallow(isUpdate ? "animationDurationUpdate" : "animationDuration");
easing = animatableModel.getShallow(isUpdate ? "animationEasingUpdate" : "animationEasing");
delay = animatableModel.getShallow(isUpdate ? "animationDelayUpdate" : "animationDelay");
}
if (animationPayload) {
animationPayload.duration != null && (duration = animationPayload.duration);
animationPayload.easing != null && (easing = animationPayload.easing);
animationPayload.delay != null && (delay = animationPayload.delay);
}
if (isFunction(delay)) {
delay = delay(dataIndex, extraDelayParams);
}
if (isFunction(duration)) {
duration = duration(dataIndex);
}
var config = {
duration: duration || 0,
delay,
easing
};
return config;
} else {
return null;
}
}
function animateOrSetProps(animationType, el, props, animatableModel, dataIndex, cb, during) {
var isFrom = false;
var removeOpt;
if (isFunction(dataIndex)) {
during = cb;
cb = dataIndex;
dataIndex = null;
} else if (isObject(dataIndex)) {
cb = dataIndex.cb;
during = dataIndex.during;
isFrom = dataIndex.isFrom;
removeOpt = dataIndex.removeOpt;
dataIndex = dataIndex.dataIndex;
}
var isRemove = animationType === "leave";
if (!isRemove) {
el.stopAnimation("leave");
}
var animationConfig = getAnimationConfig(animationType, animatableModel, dataIndex, isRemove ? removeOpt || {} : null, animatableModel && animatableModel.getAnimationDelayParams ? animatableModel.getAnimationDelayParams(el, dataIndex) : null);
if (animationConfig && animationConfig.duration > 0) {
var duration = animationConfig.duration;
var animationDelay = animationConfig.delay;
var animationEasing = animationConfig.easing;
var animateConfig = {
duration,
delay: animationDelay || 0,
easing: animationEasing,
done: cb,
force: !!cb || !!during,
setToFinal: !isRemove,
scope: animationType,
during
};
isFrom ? el.animateFrom(props, animateConfig) : el.animateTo(props, animateConfig);
} else {
el.stopAnimation();
!isFrom && el.attr(props);
during && during(1);
cb && cb();
}
}
function updateProps(el, props, animatableModel, dataIndex, cb, during) {
animateOrSetProps("update", el, props, animatableModel, dataIndex, cb, during);
}
function initProps(el, props, animatableModel, dataIndex, cb, during) {
animateOrSetProps("enter", el, props, animatableModel, dataIndex, cb, during);
}
function isElementRemoved(el) {
if (!el.__zr) {
return true;
}
for (var i = 0; i < el.animators.length; i++) {
var animator = el.animators[i];
if (animator.scope === "leave") {
return true;
}
}
return false;
}
function removeElement(el, props, animatableModel, dataIndex, cb, during) {
if (isElementRemoved(el)) {
return;
}
animateOrSetProps("leave", el, props, animatableModel, dataIndex, cb, during);
}
function fadeOutDisplayable(el, animatableModel, dataIndex, done) {
el.removeTextContent();
el.removeTextGuideLine();
removeElement(el, {
style: {
opacity: 0
}
}, animatableModel, dataIndex, done);
}
function removeElementWithFadeOut(el, animatableModel, dataIndex) {
function doRemove() {
el.parent && el.parent.remove(el);
}
if (!el.isGroup) {
fadeOutDisplayable(el, animatableModel, dataIndex, doRemove);
} else {
el.traverse(function(disp) {
if (!disp.isGroup) {
fadeOutDisplayable(disp, animatableModel, dataIndex, doRemove);
}
});
}
}
function saveOldStyle(el) {
transitionStore(el).oldStyle = el.style;
}
function getOldStyle(el) {
return transitionStore(el).oldStyle;
}
export { getAnimationConfig, getOldStyle, initProps, isElementRemoved, removeElement, removeElementWithFadeOut, saveOldStyle, transitionStore, updateProps };