plugins/report/public/echarts2/doc/echarts/util/ecEffect.js in admin-sys-1.0.2 vs plugins/report/public/echarts2/doc/echarts/util/ecEffect.js in admin-sys-1.1.0
- old
+ new
@@ -1,444 +1,444 @@
-/**
- * echarts图表特效基类
- *
- * @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。
- * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
- *
- */
-define(function (require) {
- var ecData = require('ecData');
-
- var CircleShape = require('zrender/shape/Circle');
- var ImageShape = require('zrender/shape/Image');
- var curveTool = require('zrender/tool/curve');
- var IconShape = require('shape/Icon');
- var SymbolShape = require('shape/Symbol');
- var ShapeBundle = require('zrender/shape/ShapeBundle');
- var Polyline = require('zrender/shape/Polyline');
- var vec2 = require('zrender/tool/vector');
-
- var canvasSupported = require('zrender/tool/env').canvasSupported;
-
- function point(zr, effectList, shape, zlevel) {
- var effect = shape.effect;
- var color = effect.color || shape.style.strokeColor || shape.style.color;
- var shadowColor = effect.shadowColor || color;
- var size = effect.scaleSize;
- var distance = effect.bounceDistance;
- var shadowBlur = typeof effect.shadowBlur != 'undefined'
- ? effect.shadowBlur : size;
-
- var effectShape;
- if (shape.type !== 'image') {
- effectShape = new IconShape({
- zlevel : zlevel,
- style : {
- brushType : 'stroke',
- iconType : shape.style.iconType != 'droplet'
- ? shape.style.iconType
- : 'circle',
- x : shadowBlur + 1, // 线宽
- y : shadowBlur + 1,
- n : shape.style.n,
- width : shape.style._width * size,
- height : shape.style._height * size,
- lineWidth : 1,
- strokeColor : color,
- shadowColor : shadowColor,
- shadowBlur : shadowBlur
- },
- draggable : false,
- hoverable : false
- });
- if (shape.style.iconType == 'pin') {
- effectShape.style.y += effectShape.style.height / 2 * 1.5;
- }
-
- if (canvasSupported) { // 提高性能,换成image
- effectShape.style.image = zr.shapeToImage(
- effectShape,
- effectShape.style.width + shadowBlur * 2 + 2,
- effectShape.style.height + shadowBlur * 2 + 2
- ).style.image;
-
- effectShape = new ImageShape({
- zlevel : effectShape.zlevel,
- style : effectShape.style,
- draggable : false,
- hoverable : false
- });
- }
- }
- else {
- effectShape = new ImageShape({
- zlevel : zlevel,
- style : shape.style,
- draggable : false,
- hoverable : false
- });
- }
-
- ecData.clone(shape, effectShape);
-
- // 改变坐标,不能移到前面
- effectShape.position = shape.position;
- effectList.push(effectShape);
- zr.addShape(effectShape);
-
- var devicePixelRatio = shape.type !== 'image' ? (window.devicePixelRatio || 1) : 1;
- var offset = (effectShape.style.width / devicePixelRatio - shape.style._width) / 2;
- effectShape.style.x = shape.style._x - offset;
- effectShape.style.y = shape.style._y - offset;
-
- if (shape.style.iconType == 'pin') {
- effectShape.style.y -= shape.style.height / 2 * 1.5;
- }
-
- var duration = (effect.period + Math.random() * 10) * 100;
-
- zr.modShape(
- shape.id,
- { invisible : true}
- );
-
- var centerX = effectShape.style.x + (effectShape.style.width) / 2 / devicePixelRatio;
- var centerY = effectShape.style.y + (effectShape.style.height) / 2 / devicePixelRatio;
-
- if (effect.type === 'scale') {
- // 放大效果
- zr.modShape(
- effectShape.id,
- {
- scale : [0.1, 0.1, centerX, centerY]
- }
- );
-
- zr.animate(effectShape.id, '', effect.loop)
- .when(
- duration,
- {
- scale : [1, 1, centerX, centerY]
- }
- )
- .done(function() {
- shape.effect.show = false;
- zr.delShape(effectShape.id);
- })
- .start();
- }
- else {
- zr.animate(effectShape.id, 'style', effect.loop)
- .when(
- duration,
- {
- y : effectShape.style.y - distance
- }
- )
- .when(
- duration * 2,
- {
- y : effectShape.style.y
- }
- )
- .done(function() {
- shape.effect.show = false;
- zr.delShape(effectShape.id);
- })
- .start();
- }
-
- }
-
- function largePoint(zr, effectList, shape, zlevel) {
- var effect = shape.effect;
- var color = effect.color || shape.style.strokeColor || shape.style.color;
- var size = effect.scaleSize;
- var shadowColor = effect.shadowColor || color;
- var shadowBlur = typeof effect.shadowBlur != 'undefined'
- ? effect.shadowBlur : (size * 2);
- var devicePixelRatio = window.devicePixelRatio || 1;
- var effectShape = new SymbolShape({
- zlevel : zlevel,
- position : shape.position,
- scale : shape.scale,
- style : {
- pointList : shape.style.pointList,
- iconType : shape.style.iconType,
- color : color,
- strokeColor : color,
- shadowColor : shadowColor,
- shadowBlur : shadowBlur * devicePixelRatio,
- random : true,
- brushType: 'fill',
- lineWidth:1,
- size : shape.style.size
- },
- draggable : false,
- hoverable : false
- });
-
- effectList.push(effectShape);
- zr.addShape(effectShape);
- zr.modShape(
- shape.id,
- { invisible : true}
- );
-
- var duration = Math.round(effect.period * 100);
- var clip1 = {};
- var clip2 = {};
- for (var i = 0; i < 20; i++) {
- effectShape.style['randomMap' + i] = 0;
- clip1 = {};
- clip1['randomMap' + i] = 100;
- clip2 = {};
- clip2['randomMap' + i] = 0;
- effectShape.style['randomMap' + i] = Math.random() * 100;
- zr.animate(effectShape.id, 'style', true)
- .when(duration, clip1)
- .when(duration * 2, clip2)
- .when(duration * 3, clip1)
- .when(duration * 4, clip1)
- .delay(Math.random() * duration * i)
- //.delay(duration / 15 * (15 - i + 1))
- .start();
-
- }
- }
-
- function line(zr, effectList, shape, zlevel, isLarge) {
- var effect = shape.effect;
- var shapeStyle = shape.style;
- var color = effect.color || shapeStyle.strokeColor || shapeStyle.color;
- var shadowColor = effect.shadowColor || shapeStyle.strokeColor || color;
- var size = shapeStyle.lineWidth * effect.scaleSize;
- var shadowBlur = typeof effect.shadowBlur != 'undefined'
- ? effect.shadowBlur : size;
-
- var effectShape = new CircleShape({
- zlevel : zlevel,
- style : {
- x : shadowBlur,
- y : shadowBlur,
- r : size,
- color : color,
- shadowColor : shadowColor,
- shadowBlur : shadowBlur
- },
- hoverable : false
- });
-
- var offset = 0;
- if (canvasSupported && ! isLarge) { // 提高性能,换成image
- var zlevel = effectShape.zlevel;
- effectShape = zr.shapeToImage(
- effectShape,
- (size + shadowBlur) * 2,
- (size + shadowBlur) * 2
- );
- effectShape.zlevel = zlevel;
- effectShape.hoverable = false;
-
- offset = shadowBlur;
- }
-
- if (! isLarge) {
- ecData.clone(shape, effectShape);
- // 改变坐标, 不能移到前面
- effectShape.position = shape.position;
- effectList.push(effectShape);
- zr.addShape(effectShape);
- }
-
- var effectDone = function () {
- if (! isLarge) {
- shape.effect.show = false;
- zr.delShape(effectShape.id);
- }
- effectShape.effectAnimator = null;
- };
-
- if (shape instanceof Polyline) {
- var distanceList = [0];
- var totalDist = 0;
- var pointList = shapeStyle.pointList;
- var controlPointList = shapeStyle.controlPointList;
- for (var i = 1; i < pointList.length; i++) {
- if (controlPointList) {
- var cp1 = controlPointList[(i - 1) * 2];
- var cp2 = controlPointList[(i - 1) * 2 + 1];
- totalDist += vec2.dist(pointList[i - 1], cp1)
- + vec2.dist(cp1, cp2)
- + vec2.dist(cp2, pointList[i]);
- }
- else {
- totalDist += vec2.dist(pointList[i - 1], pointList[i]);
- }
- distanceList.push(totalDist);
- }
- var obj = { p: 0 };
- var animator = zr.animation.animate(obj, { loop: effect.loop });
-
- for (var i = 0; i < distanceList.length; i++) {
- animator.when(distanceList[i] * effect.period, { p: i });
- }
- animator.during(function () {
- var i = Math.floor(obj.p);
- var x, y;
- if (i == pointList.length - 1) {
- x = pointList[i][0];
- y = pointList[i][1];
- }
- else {
- var t = obj.p - i;
- var p0 = pointList[i];
- var p1 = pointList[i + 1];
- if (controlPointList) {
- var cp1 = controlPointList[i * 2];
- var cp2 = controlPointList[i * 2 + 1];
- x = curveTool.cubicAt(
- p0[0], cp1[0], cp2[0], p1[0], t
- );
- y = curveTool.cubicAt(
- p0[1], cp1[1], cp2[1], p1[1], t
- );
- }
- else {
- x = (p1[0] - p0[0]) * t + p0[0];
- y = (p1[1] - p0[1]) * t + p0[1];
- }
- }
- effectShape.style.x = x;
- effectShape.style.y = y;
- if (! isLarge) {
- zr.modShape(effectShape);
- }
- })
- .done(effectDone)
- .start();
-
- animator.duration = totalDist * effect.period;
-
- effectShape.effectAnimator = animator;
- }
- else {
- var x0 = shapeStyle.xStart - offset;
- var y0 = shapeStyle.yStart - offset;
- var x2 = shapeStyle.xEnd - offset;
- var y2 = shapeStyle.yEnd - offset;
- effectShape.style.x = x0;
- effectShape.style.y = y0;
-
- var distance = (x2 - x0) * (x2 - x0) + (y2 - y0) * (y2 - y0);
- var duration = Math.round(Math.sqrt(Math.round(
- distance * effect.period * effect.period
- )));
-
- if (shape.style.curveness > 0) {
- var x1 = shapeStyle.cpX1 - offset;
- var y1 = shapeStyle.cpY1 - offset;
- effectShape.effectAnimator = zr.animation.animate(effectShape, { loop: effect.loop })
- .when(duration, { p: 1 })
- .during(function (target, t) {
- effectShape.style.x = curveTool.quadraticAt(
- x0, x1, x2, t
- );
- effectShape.style.y = curveTool.quadraticAt(
- y0, y1, y2, t
- );
- if (! isLarge) {
- zr.modShape(effectShape);
- }
- })
- .done(effectDone)
- .start();
- }
- else {
- // 不用 zr.animate,因为在用 ShapeBundle 的时候单个 effectShape 不会
- // 被加到 zrender 中
- effectShape.effectAnimator = zr.animation.animate(effectShape.style, { loop: effect.loop })
- .when(duration, {
- x: x2,
- y: y2
- })
- .during(function () {
- if (! isLarge) {
- zr.modShape(effectShape);
- }
- })
- .done(effectDone)
- .start();
- }
- effectShape.effectAnimator.duration = duration;
- }
- return effectShape;
- }
-
- function largeLine(zr, effectList, shape, zlevel) {
- var effectShape = new ShapeBundle({
- style: {
- shapeList: []
- },
- zlevel: zlevel,
- hoverable: false
- });
- var shapeList = shape.style.shapeList;
- var effect = shape.effect;
- effectShape.position = shape.position;
-
- var maxDuration = 0;
- var subEffectAnimators = [];
- for (var i = 0; i < shapeList.length; i++) {
- shapeList[i].effect = effect;
- var subEffectShape = line(zr, null, shapeList[i], zlevel, true);
- var subEffectAnimator = subEffectShape.effectAnimator;
- effectShape.style.shapeList.push(subEffectShape);
- if (subEffectAnimator.duration > maxDuration) {
- maxDuration = subEffectAnimator.duration;
- }
- if (i === 0) {
- effectShape.style.color = subEffectShape.style.color;
- effectShape.style.shadowBlur = subEffectShape.style.shadowBlur;
- effectShape.style.shadowColor = subEffectShape.style.shadowColor;
- }
- subEffectAnimators.push(subEffectAnimator);
- }
- effectList.push(effectShape);
- zr.addShape(effectShape);
-
- var clearAllAnimators = function () {
- for (var i = 0; i < subEffectAnimators.length; i++) {
- subEffectAnimators[i].stop();
- }
- };
- if (maxDuration) {
- effectShape.__dummy = 0;
- // Proxy animator
- var animator = zr.animate(effectShape.id, '', effect.loop)
- .when(maxDuration, {
- __dummy: 1
- })
- .during(function () {
- zr.modShape(effectShape);
- })
- .done(function () {
- shape.effect.show = false;
- zr.delShape(effectShape.id);
- })
- .start();
- var oldStop = animator.stop;
-
- animator.stop = function () {
- clearAllAnimators();
- oldStop.call(this);
- };
- }
- }
-
- return {
- point : point,
- largePoint : largePoint,
- line : line,
- largeLine: largeLine
- };
-});
+/**
+ * echarts图表特效基类
+ *
+ * @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。
+ * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
+ *
+ */
+define(function (require) {
+ var ecData = require('ecData');
+
+ var CircleShape = require('zrender/shape/Circle');
+ var ImageShape = require('zrender/shape/Image');
+ var curveTool = require('zrender/tool/curve');
+ var IconShape = require('shape/Icon');
+ var SymbolShape = require('shape/Symbol');
+ var ShapeBundle = require('zrender/shape/ShapeBundle');
+ var Polyline = require('zrender/shape/Polyline');
+ var vec2 = require('zrender/tool/vector');
+
+ var canvasSupported = require('zrender/tool/env').canvasSupported;
+
+ function point(zr, effectList, shape, zlevel) {
+ var effect = shape.effect;
+ var color = effect.color || shape.style.strokeColor || shape.style.color;
+ var shadowColor = effect.shadowColor || color;
+ var size = effect.scaleSize;
+ var distance = effect.bounceDistance;
+ var shadowBlur = typeof effect.shadowBlur != 'undefined'
+ ? effect.shadowBlur : size;
+
+ var effectShape;
+ if (shape.type !== 'image') {
+ effectShape = new IconShape({
+ zlevel : zlevel,
+ style : {
+ brushType : 'stroke',
+ iconType : shape.style.iconType != 'droplet'
+ ? shape.style.iconType
+ : 'circle',
+ x : shadowBlur + 1, // 线宽
+ y : shadowBlur + 1,
+ n : shape.style.n,
+ width : shape.style._width * size,
+ height : shape.style._height * size,
+ lineWidth : 1,
+ strokeColor : color,
+ shadowColor : shadowColor,
+ shadowBlur : shadowBlur
+ },
+ draggable : false,
+ hoverable : false
+ });
+ if (shape.style.iconType == 'pin') {
+ effectShape.style.y += effectShape.style.height / 2 * 1.5;
+ }
+
+ if (canvasSupported) { // 提高性能,换成image
+ effectShape.style.image = zr.shapeToImage(
+ effectShape,
+ effectShape.style.width + shadowBlur * 2 + 2,
+ effectShape.style.height + shadowBlur * 2 + 2
+ ).style.image;
+
+ effectShape = new ImageShape({
+ zlevel : effectShape.zlevel,
+ style : effectShape.style,
+ draggable : false,
+ hoverable : false
+ });
+ }
+ }
+ else {
+ effectShape = new ImageShape({
+ zlevel : zlevel,
+ style : shape.style,
+ draggable : false,
+ hoverable : false
+ });
+ }
+
+ ecData.clone(shape, effectShape);
+
+ // 改变坐标,不能移到前面
+ effectShape.position = shape.position;
+ effectList.push(effectShape);
+ zr.addShape(effectShape);
+
+ var devicePixelRatio = shape.type !== 'image' ? (window.devicePixelRatio || 1) : 1;
+ var offset = (effectShape.style.width / devicePixelRatio - shape.style._width) / 2;
+ effectShape.style.x = shape.style._x - offset;
+ effectShape.style.y = shape.style._y - offset;
+
+ if (shape.style.iconType == 'pin') {
+ effectShape.style.y -= shape.style.height / 2 * 1.5;
+ }
+
+ var duration = (effect.period + Math.random() * 10) * 100;
+
+ zr.modShape(
+ shape.id,
+ { invisible : true}
+ );
+
+ var centerX = effectShape.style.x + (effectShape.style.width) / 2 / devicePixelRatio;
+ var centerY = effectShape.style.y + (effectShape.style.height) / 2 / devicePixelRatio;
+
+ if (effect.type === 'scale') {
+ // 放大效果
+ zr.modShape(
+ effectShape.id,
+ {
+ scale : [0.1, 0.1, centerX, centerY]
+ }
+ );
+
+ zr.animate(effectShape.id, '', effect.loop)
+ .when(
+ duration,
+ {
+ scale : [1, 1, centerX, centerY]
+ }
+ )
+ .done(function() {
+ shape.effect.show = false;
+ zr.delShape(effectShape.id);
+ })
+ .start();
+ }
+ else {
+ zr.animate(effectShape.id, 'style', effect.loop)
+ .when(
+ duration,
+ {
+ y : effectShape.style.y - distance
+ }
+ )
+ .when(
+ duration * 2,
+ {
+ y : effectShape.style.y
+ }
+ )
+ .done(function() {
+ shape.effect.show = false;
+ zr.delShape(effectShape.id);
+ })
+ .start();
+ }
+
+ }
+
+ function largePoint(zr, effectList, shape, zlevel) {
+ var effect = shape.effect;
+ var color = effect.color || shape.style.strokeColor || shape.style.color;
+ var size = effect.scaleSize;
+ var shadowColor = effect.shadowColor || color;
+ var shadowBlur = typeof effect.shadowBlur != 'undefined'
+ ? effect.shadowBlur : (size * 2);
+ var devicePixelRatio = window.devicePixelRatio || 1;
+ var effectShape = new SymbolShape({
+ zlevel : zlevel,
+ position : shape.position,
+ scale : shape.scale,
+ style : {
+ pointList : shape.style.pointList,
+ iconType : shape.style.iconType,
+ color : color,
+ strokeColor : color,
+ shadowColor : shadowColor,
+ shadowBlur : shadowBlur * devicePixelRatio,
+ random : true,
+ brushType: 'fill',
+ lineWidth:1,
+ size : shape.style.size
+ },
+ draggable : false,
+ hoverable : false
+ });
+
+ effectList.push(effectShape);
+ zr.addShape(effectShape);
+ zr.modShape(
+ shape.id,
+ { invisible : true}
+ );
+
+ var duration = Math.round(effect.period * 100);
+ var clip1 = {};
+ var clip2 = {};
+ for (var i = 0; i < 20; i++) {
+ effectShape.style['randomMap' + i] = 0;
+ clip1 = {};
+ clip1['randomMap' + i] = 100;
+ clip2 = {};
+ clip2['randomMap' + i] = 0;
+ effectShape.style['randomMap' + i] = Math.random() * 100;
+ zr.animate(effectShape.id, 'style', true)
+ .when(duration, clip1)
+ .when(duration * 2, clip2)
+ .when(duration * 3, clip1)
+ .when(duration * 4, clip1)
+ .delay(Math.random() * duration * i)
+ //.delay(duration / 15 * (15 - i + 1))
+ .start();
+
+ }
+ }
+
+ function line(zr, effectList, shape, zlevel, isLarge) {
+ var effect = shape.effect;
+ var shapeStyle = shape.style;
+ var color = effect.color || shapeStyle.strokeColor || shapeStyle.color;
+ var shadowColor = effect.shadowColor || shapeStyle.strokeColor || color;
+ var size = shapeStyle.lineWidth * effect.scaleSize;
+ var shadowBlur = typeof effect.shadowBlur != 'undefined'
+ ? effect.shadowBlur : size;
+
+ var effectShape = new CircleShape({
+ zlevel : zlevel,
+ style : {
+ x : shadowBlur,
+ y : shadowBlur,
+ r : size,
+ color : color,
+ shadowColor : shadowColor,
+ shadowBlur : shadowBlur
+ },
+ hoverable : false
+ });
+
+ var offset = 0;
+ if (canvasSupported && ! isLarge) { // 提高性能,换成image
+ var zlevel = effectShape.zlevel;
+ effectShape = zr.shapeToImage(
+ effectShape,
+ (size + shadowBlur) * 2,
+ (size + shadowBlur) * 2
+ );
+ effectShape.zlevel = zlevel;
+ effectShape.hoverable = false;
+
+ offset = shadowBlur;
+ }
+
+ if (! isLarge) {
+ ecData.clone(shape, effectShape);
+ // 改变坐标, 不能移到前面
+ effectShape.position = shape.position;
+ effectList.push(effectShape);
+ zr.addShape(effectShape);
+ }
+
+ var effectDone = function () {
+ if (! isLarge) {
+ shape.effect.show = false;
+ zr.delShape(effectShape.id);
+ }
+ effectShape.effectAnimator = null;
+ };
+
+ if (shape instanceof Polyline) {
+ var distanceList = [0];
+ var totalDist = 0;
+ var pointList = shapeStyle.pointList;
+ var controlPointList = shapeStyle.controlPointList;
+ for (var i = 1; i < pointList.length; i++) {
+ if (controlPointList) {
+ var cp1 = controlPointList[(i - 1) * 2];
+ var cp2 = controlPointList[(i - 1) * 2 + 1];
+ totalDist += vec2.dist(pointList[i - 1], cp1)
+ + vec2.dist(cp1, cp2)
+ + vec2.dist(cp2, pointList[i]);
+ }
+ else {
+ totalDist += vec2.dist(pointList[i - 1], pointList[i]);
+ }
+ distanceList.push(totalDist);
+ }
+ var obj = { p: 0 };
+ var animator = zr.animation.animate(obj, { loop: effect.loop });
+
+ for (var i = 0; i < distanceList.length; i++) {
+ animator.when(distanceList[i] * effect.period, { p: i });
+ }
+ animator.during(function () {
+ var i = Math.floor(obj.p);
+ var x, y;
+ if (i == pointList.length - 1) {
+ x = pointList[i][0];
+ y = pointList[i][1];
+ }
+ else {
+ var t = obj.p - i;
+ var p0 = pointList[i];
+ var p1 = pointList[i + 1];
+ if (controlPointList) {
+ var cp1 = controlPointList[i * 2];
+ var cp2 = controlPointList[i * 2 + 1];
+ x = curveTool.cubicAt(
+ p0[0], cp1[0], cp2[0], p1[0], t
+ );
+ y = curveTool.cubicAt(
+ p0[1], cp1[1], cp2[1], p1[1], t
+ );
+ }
+ else {
+ x = (p1[0] - p0[0]) * t + p0[0];
+ y = (p1[1] - p0[1]) * t + p0[1];
+ }
+ }
+ effectShape.style.x = x;
+ effectShape.style.y = y;
+ if (! isLarge) {
+ zr.modShape(effectShape);
+ }
+ })
+ .done(effectDone)
+ .start();
+
+ animator.duration = totalDist * effect.period;
+
+ effectShape.effectAnimator = animator;
+ }
+ else {
+ var x0 = shapeStyle.xStart - offset;
+ var y0 = shapeStyle.yStart - offset;
+ var x2 = shapeStyle.xEnd - offset;
+ var y2 = shapeStyle.yEnd - offset;
+ effectShape.style.x = x0;
+ effectShape.style.y = y0;
+
+ var distance = (x2 - x0) * (x2 - x0) + (y2 - y0) * (y2 - y0);
+ var duration = Math.round(Math.sqrt(Math.round(
+ distance * effect.period * effect.period
+ )));
+
+ if (shape.style.curveness > 0) {
+ var x1 = shapeStyle.cpX1 - offset;
+ var y1 = shapeStyle.cpY1 - offset;
+ effectShape.effectAnimator = zr.animation.animate(effectShape, { loop: effect.loop })
+ .when(duration, { p: 1 })
+ .during(function (target, t) {
+ effectShape.style.x = curveTool.quadraticAt(
+ x0, x1, x2, t
+ );
+ effectShape.style.y = curveTool.quadraticAt(
+ y0, y1, y2, t
+ );
+ if (! isLarge) {
+ zr.modShape(effectShape);
+ }
+ })
+ .done(effectDone)
+ .start();
+ }
+ else {
+ // 不用 zr.animate,因为在用 ShapeBundle 的时候单个 effectShape 不会
+ // 被加到 zrender 中
+ effectShape.effectAnimator = zr.animation.animate(effectShape.style, { loop: effect.loop })
+ .when(duration, {
+ x: x2,
+ y: y2
+ })
+ .during(function () {
+ if (! isLarge) {
+ zr.modShape(effectShape);
+ }
+ })
+ .done(effectDone)
+ .start();
+ }
+ effectShape.effectAnimator.duration = duration;
+ }
+ return effectShape;
+ }
+
+ function largeLine(zr, effectList, shape, zlevel) {
+ var effectShape = new ShapeBundle({
+ style: {
+ shapeList: []
+ },
+ zlevel: zlevel,
+ hoverable: false
+ });
+ var shapeList = shape.style.shapeList;
+ var effect = shape.effect;
+ effectShape.position = shape.position;
+
+ var maxDuration = 0;
+ var subEffectAnimators = [];
+ for (var i = 0; i < shapeList.length; i++) {
+ shapeList[i].effect = effect;
+ var subEffectShape = line(zr, null, shapeList[i], zlevel, true);
+ var subEffectAnimator = subEffectShape.effectAnimator;
+ effectShape.style.shapeList.push(subEffectShape);
+ if (subEffectAnimator.duration > maxDuration) {
+ maxDuration = subEffectAnimator.duration;
+ }
+ if (i === 0) {
+ effectShape.style.color = subEffectShape.style.color;
+ effectShape.style.shadowBlur = subEffectShape.style.shadowBlur;
+ effectShape.style.shadowColor = subEffectShape.style.shadowColor;
+ }
+ subEffectAnimators.push(subEffectAnimator);
+ }
+ effectList.push(effectShape);
+ zr.addShape(effectShape);
+
+ var clearAllAnimators = function () {
+ for (var i = 0; i < subEffectAnimators.length; i++) {
+ subEffectAnimators[i].stop();
+ }
+ };
+ if (maxDuration) {
+ effectShape.__dummy = 0;
+ // Proxy animator
+ var animator = zr.animate(effectShape.id, '', effect.loop)
+ .when(maxDuration, {
+ __dummy: 1
+ })
+ .during(function () {
+ zr.modShape(effectShape);
+ })
+ .done(function () {
+ shape.effect.show = false;
+ zr.delShape(effectShape.id);
+ })
+ .start();
+ var oldStop = animator.stop;
+
+ animator.stop = function () {
+ clearAllAnimators();
+ oldStop.call(this);
+ };
+ }
+ }
+
+ return {
+ point : point,
+ largePoint : largePoint,
+ line : line,
+ largeLine: largeLine
+ };
+});