cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
154 lines (153 loc) • 6.06 kB
JavaScript
import { __extends } from "../../../../tslib/tslib.es6.mjs";
import Line from "./Line.mjs";
import { isArray, retrieve, isFunction } from "../../../../zrender/lib/core/util.mjs";
import { createSymbol } from "../../util/symbol.mjs";
import { dist } from "../../../../zrender/lib/core/vector.mjs";
import { quadraticAt, quadraticDerivativeAt } from "../../../../zrender/lib/core/curve.mjs";
import Group from "../../../../zrender/lib/graphic/Group.mjs";
var EffectLine = function(_super) {
__extends(EffectLine2, _super);
function EffectLine2(lineData, idx, seriesScope) {
var _this = _super.call(this) || this;
_this.add(_this.createLine(lineData, idx, seriesScope));
_this._updateEffectSymbol(lineData, idx);
return _this;
}
EffectLine2.prototype.createLine = function(lineData, idx, seriesScope) {
return new Line(lineData, idx, seriesScope);
};
EffectLine2.prototype._updateEffectSymbol = function(lineData, idx) {
var itemModel = lineData.getItemModel(idx);
var effectModel = itemModel.getModel("effect");
var size = effectModel.get("symbolSize");
var symbolType = effectModel.get("symbol");
if (!isArray(size)) {
size = [size, size];
}
var lineStyle = lineData.getItemVisual(idx, "style");
var color = effectModel.get("color") || lineStyle && lineStyle.stroke;
var symbol = this.childAt(1);
if (this._symbolType !== symbolType) {
this.remove(symbol);
symbol = createSymbol(symbolType, -0.5, -0.5, 1, 1, color);
symbol.z2 = 100;
symbol.culling = true;
this.add(symbol);
}
if (!symbol) {
return;
}
symbol.setStyle("shadowColor", color);
symbol.setStyle(effectModel.getItemStyle(["color"]));
symbol.scaleX = size[0];
symbol.scaleY = size[1];
symbol.setColor(color);
this._symbolType = symbolType;
this._symbolScale = size;
this._updateEffectAnimation(lineData, effectModel, idx);
};
EffectLine2.prototype._updateEffectAnimation = function(lineData, effectModel, idx) {
var symbol = this.childAt(1);
if (!symbol) {
return;
}
var points = lineData.getItemLayout(idx);
var period = effectModel.get("period") * 1e3;
var loop = effectModel.get("loop");
var roundTrip = effectModel.get("roundTrip");
var constantSpeed = effectModel.get("constantSpeed");
var delayExpr = retrieve(effectModel.get("delay"), function(idx2) {
return idx2 / lineData.count() * period / 3;
});
symbol.ignore = true;
this._updateAnimationPoints(symbol, points);
if (constantSpeed > 0) {
period = this._getLineLength(symbol) / constantSpeed * 1e3;
}
if (period !== this._period || loop !== this._loop || roundTrip !== this._roundTrip) {
symbol.stopAnimation();
var delayNum = void 0;
if (isFunction(delayExpr)) {
delayNum = delayExpr(idx);
} else {
delayNum = delayExpr;
}
if (symbol.__t > 0) {
delayNum = -period * symbol.__t;
}
this._animateSymbol(symbol, period, delayNum, loop, roundTrip);
}
this._period = period;
this._loop = loop;
this._roundTrip = roundTrip;
};
EffectLine2.prototype._animateSymbol = function(symbol, period, delayNum, loop, roundTrip) {
if (period > 0) {
symbol.__t = 0;
var self_1 = this;
var animator = symbol.animate("", loop).when(roundTrip ? period * 2 : period, {
__t: roundTrip ? 2 : 1
}).delay(delayNum).during(function() {
self_1._updateSymbolPosition(symbol);
});
if (!loop) {
animator.done(function() {
self_1.remove(symbol);
});
}
animator.start();
}
};
EffectLine2.prototype._getLineLength = function(symbol) {
return dist(symbol.__p1, symbol.__cp1) + dist(symbol.__cp1, symbol.__p2);
};
EffectLine2.prototype._updateAnimationPoints = function(symbol, points) {
symbol.__p1 = points[0];
symbol.__p2 = points[1];
symbol.__cp1 = points[2] || [(points[0][0] + points[1][0]) / 2, (points[0][1] + points[1][1]) / 2];
};
EffectLine2.prototype.updateData = function(lineData, idx, seriesScope) {
this.childAt(0).updateData(lineData, idx, seriesScope);
this._updateEffectSymbol(lineData, idx);
};
EffectLine2.prototype._updateSymbolPosition = function(symbol) {
var p1 = symbol.__p1;
var p2 = symbol.__p2;
var cp1 = symbol.__cp1;
var t = symbol.__t < 1 ? symbol.__t : 2 - symbol.__t;
var pos = [symbol.x, symbol.y];
var lastPos = pos.slice();
var quadraticAt$1 = quadraticAt;
var quadraticDerivativeAt$1 = quadraticDerivativeAt;
pos[0] = quadraticAt$1(p1[0], cp1[0], p2[0], t);
pos[1] = quadraticAt$1(p1[1], cp1[1], p2[1], t);
var tx = symbol.__t < 1 ? quadraticDerivativeAt$1(p1[0], cp1[0], p2[0], t) : quadraticDerivativeAt$1(p2[0], cp1[0], p1[0], 1 - t);
var ty = symbol.__t < 1 ? quadraticDerivativeAt$1(p1[1], cp1[1], p2[1], t) : quadraticDerivativeAt$1(p2[1], cp1[1], p1[1], 1 - t);
symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;
if (this._symbolType === "line" || this._symbolType === "rect" || this._symbolType === "roundRect") {
if (symbol.__lastT !== void 0 && symbol.__lastT < symbol.__t) {
symbol.scaleY = dist(lastPos, pos) * 1.05;
if (t === 1) {
pos[0] = lastPos[0] + (pos[0] - lastPos[0]) / 2;
pos[1] = lastPos[1] + (pos[1] - lastPos[1]) / 2;
}
} else if (symbol.__lastT === 1) {
symbol.scaleY = 2 * dist(p1, pos);
} else {
symbol.scaleY = this._symbolScale[1];
}
}
symbol.__lastT = symbol.__t;
symbol.ignore = false;
symbol.x = pos[0];
symbol.y = pos[1];
};
EffectLine2.prototype.updateLayout = function(lineData, idx) {
this.childAt(0).updateLayout(lineData, idx);
var effectModel = lineData.getItemModel(idx).getModel("effect");
this._updateEffectAnimation(lineData, effectModel, idx);
};
return EffectLine2;
}(Group);
var EffectLine$1 = EffectLine;
export { EffectLine$1 as default };