UNPKG

cione-comp-lib

Version:

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

141 lines (140 loc) 4.81 kB
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 };