UNPKG

cione-comp-lib

Version:

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

148 lines (147 loc) 5.11 kB
import { isCombineMorphing, morphPath, combineMorph, separateMorph } from "../../../zrender/lib/tool/morphPath.mjs"; import "../util/graphic.mjs"; import { isArray, defaults } from "../../../zrender/lib/core/util.mjs"; import { getAnimationConfig } from "./basicTransition.mjs"; import { clonePath } from "../../../zrender/lib/tool/path.mjs"; import Path from "../../../zrender/lib/graphic/Path.mjs"; function isMultiple(elements) { return isArray(elements[0]); } function prepareMorphBatches(one, many) { var batches = []; var batchCount = one.length; for (var i = 0; i < batchCount; i++) { batches.push({ one: one[i], many: [] }); } for (var i = 0; i < many.length; i++) { var len = many[i].length; var k = void 0; for (k = 0; k < len; k++) { batches[k % batchCount].many.push(many[i][k]); } } var off = 0; for (var i = batchCount - 1; i >= 0; i--) { if (!batches[i].many.length) { var moveFrom = batches[off].many; if (moveFrom.length <= 1) { if (off) { off = 0; } else { return batches; } } var len = moveFrom.length; var mid = Math.ceil(len / 2); batches[i].many = moveFrom.slice(mid, len); batches[off].many = moveFrom.slice(0, mid); off++; } } return batches; } var pathDividers = { clone: function(params) { var ret = []; var approxOpacity = 1 - Math.pow(1 - params.path.style.opacity, 1 / params.count); for (var i = 0; i < params.count; i++) { var cloned = clonePath(params.path); cloned.setStyle("opacity", approxOpacity); ret.push(cloned); } return ret; }, split: null }; function applyMorphAnimation(from, to, divideShape, seriesModel, dataIndex, animateOtherProps) { if (!from.length || !to.length) { return; } var updateAnimationCfg = getAnimationConfig("update", seriesModel, dataIndex); if (!(updateAnimationCfg && updateAnimationCfg.duration > 0)) { return; } var animationDelay = seriesModel.getModel("universalTransition").get("delay"); var animationCfg = Object.assign({ setToFinal: true }, updateAnimationCfg); var many; var one; if (isMultiple(from)) { many = from; one = to; } if (isMultiple(to)) { many = to; one = from; } function morphOneBatch(batch, fromIsMany2, animateIndex2, animateCount2, forceManyOne) { var batchMany = batch.many; var batchOne = batch.one; if (batchMany.length === 1 && !forceManyOne) { var batchFrom = fromIsMany2 ? batchMany[0] : batchOne; var batchTo = fromIsMany2 ? batchOne : batchMany[0]; if (isCombineMorphing(batchFrom)) { morphOneBatch({ many: [batchFrom], one: batchTo }, true, animateIndex2, animateCount2, true); } else { var individualAnimationCfg = animationDelay ? defaults({ delay: animationDelay(animateIndex2, animateCount2) }, animationCfg) : animationCfg; morphPath(batchFrom, batchTo, individualAnimationCfg); animateOtherProps(batchFrom, batchTo, batchFrom, batchTo, individualAnimationCfg); } } else { var separateAnimationCfg = defaults({ dividePath: pathDividers[divideShape], individualDelay: animationDelay && function(idx, count2, fromPath, toPath) { return animationDelay(idx + animateIndex2, animateCount2); } }, animationCfg); var _a = fromIsMany2 ? combineMorph(batchMany, batchOne, separateAnimationCfg) : separateMorph(batchOne, batchMany, separateAnimationCfg), fromIndividuals = _a.fromIndividuals, toIndividuals = _a.toIndividuals; var count = fromIndividuals.length; for (var k = 0; k < count; k++) { var individualAnimationCfg = animationDelay ? defaults({ delay: animationDelay(k, count) }, animationCfg) : animationCfg; animateOtherProps(fromIndividuals[k], toIndividuals[k], fromIsMany2 ? batchMany[k] : batch.one, fromIsMany2 ? batch.one : batchMany[k], individualAnimationCfg); } } } var fromIsMany = many ? many === from : from.length > to.length; var morphBatches = many ? prepareMorphBatches(one, many) : prepareMorphBatches(fromIsMany ? to : from, [fromIsMany ? from : to]); var animateCount = 0; for (var i = 0; i < morphBatches.length; i++) { animateCount += morphBatches[i].many.length; } var animateIndex = 0; for (var i = 0; i < morphBatches.length; i++) { morphOneBatch(morphBatches[i], fromIsMany, animateIndex, animateCount); animateIndex += morphBatches[i].many.length; } } function getPathList(elements) { if (!elements) { return []; } if (isArray(elements)) { var pathList_1 = []; for (var i = 0; i < elements.length; i++) { pathList_1.push(getPathList(elements[i])); } return pathList_1; } var pathList = []; elements.traverse(function(el) { if (el instanceof Path && !el.disableMorphing && !el.invisible && !el.ignore) { pathList.push(el); } }); return pathList; } export { applyMorphAnimation, getPathList };