light-chart
Version:
Charts for mobile visualization.
131 lines (115 loc) • 3.28 kB
JavaScript
/**
* Group animate functions
* @author sima.zhang1990@gmail.com
*/
const Util = require('./util');
const Helper = require('../util/helper');
const { Shape } = require('../graphic/index');
function _groupScaleIn(container, animateCfg, coord, zeroY, type) {
const { start, end, width, height } = Util.getCoordInfo(coord);
let x;
let y;
const clip = new Shape.Rect({
attrs: {
x: start.x,
y: end.y,
width,
height
}
});
if (type === 'y') {
x = start.x + width / 2;
y = zeroY.y < start.y ? zeroY.y : start.y;
} else if (type === 'x') {
x = zeroY.x > start.x ? zeroY.x : start.x;
y = start.y + height / 2;
} else if (type === 'xy') {
if (coord.isPolar) {
x = coord.center.x;
y = coord.center.y;
} else {
x = (start.x + end.x) / 2;
y = (start.y + end.y) / 2;
}
}
const endMatrix = Util.getScaledMatrix(clip, [ x, y ], type);
clip.isClip = true;
clip.endState = {
matrix: endMatrix
};
clip.set('canvas', container.get('canvas'));
container.attr('clip', clip);
const onEnd = function() {
container.attr('clip', null);
clip.remove(true);
};
Util.doAnimation(clip, clip.endState, animateCfg, onEnd);
}
function _shapeScale(container, animateCfg, type) {
const shapes = container.get('children');
let x;
let y;
let endMatrix;
for (let i = 0, len = shapes.length; i < len; i++) {
const shape = shapes[i];
const box = shape.getBBox();
x = (box.minX + box.maxX) / 2;
y = (box.minY + box.maxY) / 2;
endMatrix = Util.getScaledMatrix(shape, [ x, y ], type);
Util.doAnimation(shape, { matrix: endMatrix }, animateCfg);
}
}
function groupScaleInX(container, animateCfg, coord, zeroY) {
_groupScaleIn(container, animateCfg, coord, zeroY, 'x');
}
function groupScaleInY(container, animateCfg, coord, zeroY) {
_groupScaleIn(container, animateCfg, coord, zeroY, 'y');
}
function groupScaleInXY(container, animateCfg, coord, zeroY) {
_groupScaleIn(container, animateCfg, coord, zeroY, 'xy');
}
function shapesScaleInX(container, animateCfg) {
_shapeScale(container, animateCfg, 'x');
}
function shapesScaleInY(container, animateCfg) {
_shapeScale(container, animateCfg, 'y');
}
function shapesScaleInXY(container, animateCfg) {
_shapeScale(container, animateCfg, 'xy');
}
function groupWaveIn(container, animateCfg, coord) {
const clip = Helper.getClip(coord);
clip.set('canvas', container.get('canvas'));
container.attr('clip', clip);
const onEnd = function() {
container.attr('clip', null);
clip.remove(true);
};
const endState = {};
if (coord.isPolar) {
const { startAngle, endAngle } = coord;
endState.endAngle = endAngle;
clip.attr('endAngle', startAngle);
} else {
const { start, end } = coord;
const width = Math.abs(start.x - end.x);
const height = Math.abs(start.y - end.y);
if (coord.isTransposed) {
clip.attr('height', 0);
endState.height = height;
} else {
clip.attr('width', 0);
endState.width = width;
}
}
Util.doAnimation(clip, endState, animateCfg, onEnd);
}
module.exports = {
groupWaveIn,
groupScaleInX,
groupScaleInY,
groupScaleInXY,
shapesScaleInX,
shapesScaleInY,
shapesScaleInXY
};