UNPKG

cione-comp-lib

Version:

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

153 lines (152 loc) 5.51 kB
import { traverseElements } from "../../util/graphic.mjs"; import SymbolClz from "./Symbol.mjs"; import { isObject } from "../../../../zrender/lib/core/util.mjs"; import { getLabelStatesModels } from "../../label/labelStyle.mjs"; import Group from "../../../../zrender/lib/graphic/Group.mjs"; import { updateProps } from "../../animation/basicTransition.mjs"; function symbolNeedsDraw(data, point, idx, opt) { return point && !isNaN(point[0]) && !isNaN(point[1]) && !(opt.isIgnore && opt.isIgnore(idx)) && !(opt.clipShape && !opt.clipShape.contain(point[0], point[1])) && data.getItemVisual(idx, "symbol") !== "none"; } function normalizeUpdateOpt(opt) { if (opt != null && !isObject(opt)) { opt = { isIgnore: opt }; } return opt || {}; } function makeSeriesScope(data) { var seriesModel = data.hostModel; var emphasisModel = seriesModel.getModel("emphasis"); return { emphasisItemStyle: emphasisModel.getModel("itemStyle").getItemStyle(), blurItemStyle: seriesModel.getModel(["blur", "itemStyle"]).getItemStyle(), selectItemStyle: seriesModel.getModel(["select", "itemStyle"]).getItemStyle(), focus: emphasisModel.get("focus"), blurScope: emphasisModel.get("blurScope"), emphasisDisabled: emphasisModel.get("disabled"), hoverScale: emphasisModel.get("scale"), labelStatesModels: getLabelStatesModels(seriesModel), cursorStyle: seriesModel.get("cursor") }; } var SymbolDraw = function() { function SymbolDraw2(SymbolCtor) { this.group = new Group(); this._SymbolCtor = SymbolCtor || SymbolClz; } SymbolDraw2.prototype.updateData = function(data, opt) { this._progressiveEls = null; opt = normalizeUpdateOpt(opt); var group = this.group; var seriesModel = data.hostModel; var oldData = this._data; var SymbolCtor = this._SymbolCtor; var disableAnimation = opt.disableAnimation; var seriesScope = makeSeriesScope(data); var symbolUpdateOpt = { disableAnimation }; var getSymbolPoint = opt.getSymbolPoint || function(idx) { return data.getItemLayout(idx); }; if (!oldData) { group.removeAll(); } data.diff(oldData).add(function(newIdx) { var point = getSymbolPoint(newIdx); if (symbolNeedsDraw(data, point, newIdx, opt)) { var symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt); symbolEl.setPosition(point); data.setItemGraphicEl(newIdx, symbolEl); group.add(symbolEl); } }).update(function(newIdx, oldIdx) { var symbolEl = oldData.getItemGraphicEl(oldIdx); var point = getSymbolPoint(newIdx); if (!symbolNeedsDraw(data, point, newIdx, opt)) { group.remove(symbolEl); return; } var newSymbolType = data.getItemVisual(newIdx, "symbol") || "circle"; var oldSymbolType = symbolEl && symbolEl.getSymbolType && symbolEl.getSymbolType(); if (!symbolEl || oldSymbolType && oldSymbolType !== newSymbolType) { group.remove(symbolEl); symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt); symbolEl.setPosition(point); } else { symbolEl.updateData(data, newIdx, seriesScope, symbolUpdateOpt); var target = { x: point[0], y: point[1] }; disableAnimation ? symbolEl.attr(target) : updateProps(symbolEl, target, seriesModel); } group.add(symbolEl); data.setItemGraphicEl(newIdx, symbolEl); }).remove(function(oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); el && el.fadeOut(function() { group.remove(el); }, seriesModel); }).execute(); this._getSymbolPoint = getSymbolPoint; this._data = data; }; SymbolDraw2.prototype.updateLayout = function() { var _this = this; var data = this._data; if (data) { data.eachItemGraphicEl(function(el, idx) { var point = _this._getSymbolPoint(idx); el.setPosition(point); el.markRedraw(); }); } }; SymbolDraw2.prototype.incrementalPrepareUpdate = function(data) { this._seriesScope = makeSeriesScope(data); this._data = null; this.group.removeAll(); }; SymbolDraw2.prototype.incrementalUpdate = function(taskParams, data, opt) { this._progressiveEls = []; opt = normalizeUpdateOpt(opt); function updateIncrementalAndHover(el2) { if (!el2.isGroup) { el2.incremental = true; el2.ensureState("emphasis").hoverLayer = true; } } for (var idx = taskParams.start; idx < taskParams.end; idx++) { var point = data.getItemLayout(idx); if (symbolNeedsDraw(data, point, idx, opt)) { var el = new this._SymbolCtor(data, idx, this._seriesScope); el.traverse(updateIncrementalAndHover); el.setPosition(point); this.group.add(el); data.setItemGraphicEl(idx, el); this._progressiveEls.push(el); } } }; SymbolDraw2.prototype.eachRendered = function(cb) { traverseElements(this._progressiveEls || this.group, cb); }; SymbolDraw2.prototype.remove = function(enableAnimation) { var group = this.group; var data = this._data; if (data && enableAnimation) { data.eachItemGraphicEl(function(el) { el.fadeOut(function() { group.remove(el); }, data.hostModel); }); } else { group.removeAll(); } }; return SymbolDraw2; }(); var SymbolDraw$1 = SymbolDraw; export { SymbolDraw$1 as default };