123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- /**
- * AUTO-GENERATED FILE. DO NOT MODIFY.
- */
- /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- import { isFunction, isObject, retrieve2 } from 'zrender/lib/core/util.js';
- import { makeInner } from '../util/model.js';
- // Stored properties for further transition.
- export var transitionStore = makeInner();
- /**
- * Return null if animation is disabled.
- */
- export function getAnimationConfig(animationType, animatableModel, dataIndex,
- // Extra opts can override the option in animatable model.
- extraOpts,
- // TODO It's only for pictorial bar now.
- extraDelayParams) {
- var animationPayload;
- // Check if there is global animation configuration from dataZoom/resize can override the config in option.
- // If animation is enabled. Will use this animation config in payload.
- // If animation is disabled. Just ignore it.
- 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');
- }
- // animation from payload has highest priority.
- 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: delay,
- easing: 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) {
- // Must stop the remove animation.
- 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: duration,
- delay: animationDelay || 0,
- easing: animationEasing,
- done: cb,
- force: !!cb || !!during,
- // Set to final state in update/init animation.
- // So the post processing based on the path shape can be done correctly.
- setToFinal: !isRemove,
- scope: animationType,
- during: during
- };
- isFrom ? el.animateFrom(props, animateConfig) : el.animateTo(props, animateConfig);
- } else {
- el.stopAnimation();
- // If `isFrom`, the props is the "from" props.
- !isFrom && el.attr(props);
- // Call during at least once.
- during && during(1);
- cb && cb();
- }
- }
- /**
- * Update graphic element properties with or without animation according to the
- * configuration in series.
- *
- * Caution: this method will stop previous animation.
- * So do not use this method to one element twice before
- * animation starts, unless you know what you are doing.
- * @example
- * graphic.updateProps(el, {
- * position: [100, 100]
- * }, seriesModel, dataIndex, function () { console.log('Animation done!'); });
- * // Or
- * graphic.updateProps(el, {
- * position: [100, 100]
- * }, seriesModel, function () { console.log('Animation done!'); });
- */
- function updateProps(el, props,
- // TODO: TYPE AnimatableModel
- animatableModel, dataIndex, cb, during) {
- animateOrSetProps('update', el, props, animatableModel, dataIndex, cb, during);
- }
- export { updateProps };
- /**
- * Init graphic element properties with or without animation according to the
- * configuration in series.
- *
- * Caution: this method will stop previous animation.
- * So do not use this method to one element twice before
- * animation starts, unless you know what you are doing.
- */
- export function initProps(el, props, animatableModel, dataIndex, cb, during) {
- animateOrSetProps('enter', el, props, animatableModel, dataIndex, cb, during);
- }
- /**
- * If element is removed.
- * It can determine if element is having remove animation.
- */
- export 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;
- }
- /**
- * Remove graphic element
- */
- export function removeElement(el, props, animatableModel, dataIndex, cb, during) {
- // Don't do remove animation twice.
- 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);
- }
- export function removeElementWithFadeOut(el, animatableModel, dataIndex) {
- function doRemove() {
- el.parent && el.parent.remove(el);
- }
- // Hide label and labelLine first
- // TODO Also use fade out animation?
- if (!el.isGroup) {
- fadeOutDisplayable(el, animatableModel, dataIndex, doRemove);
- } else {
- el.traverse(function (disp) {
- if (!disp.isGroup) {
- // Can invoke doRemove multiple times.
- fadeOutDisplayable(disp, animatableModel, dataIndex, doRemove);
- }
- });
- }
- }
- /**
- * Save old style for style transition in universalTransition module.
- * It's used when element will be reused in each render.
- * For chart like map, heatmap, which will always create new element.
- * We don't need to save this because universalTransition can get old style from the old element
- */
- export function saveOldStyle(el) {
- transitionStore(el).oldStyle = el.style;
- }
- export function getOldStyle(el) {
- return transitionStore(el).oldStyle;
- }
|