NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/g2/esm/chart/chart.js

126 lines
5.0 KiB
Java
Raw Normal View History

2023-09-14 14:47:11 +08:00
import { __assign, __extends } from "tslib";
import { debounce, each, isString } from '@antv/util';
import { GROUP_Z_INDEX } from '../constant';
import { getEngine } from '../engine';
import { createDom, getChartSize, removeDom, modifyCSS } from '../util/dom';
import View from './view';
/**
* Chart 是使用 G2 进行绘图的入口
*/
var Chart = /** @class */ (function (_super) {
__extends(Chart, _super);
// @ts-ignore
function Chart(props) {
var _this = this;
var container = props.container, width = props.width, height = props.height, _a = props.autoFit, autoFit = _a === void 0 ? false : _a, padding = props.padding, _b = props.renderer, renderer = _b === void 0 ? 'canvas' : _b, pixelRatio = props.pixelRatio, _c = props.localRefresh, localRefresh = _c === void 0 ? true : _c, _d = props.visible, visible = _d === void 0 ? true : _d, _e = props.defaultInteractions, defaultInteractions = _e === void 0 ? ['tooltip', 'legend-filter', 'legend-active', 'continuous-filter'] : _e, options = props.options, limitInPlot = props.limitInPlot, theme = props.theme;
var ele = isString(container) ? document.getElementById(container) : container;
// 生成内部正式绘制的 div 元素
var wrapperElement = createDom('<div style="position:relative;"></div>');
ele.appendChild(wrapperElement);
// if autoFit, use the container size, to avoid the graph render twice.
var size = getChartSize(ele, autoFit, width, height);
var G = getEngine(renderer);
var canvas = new G.Canvas(__assign({ container: wrapperElement, pixelRatio: pixelRatio,
localRefresh: localRefresh }, size));
// 调用 view 的创建
_this = _super.call(this, {
parent: null,
canvas: canvas,
// create 3 group layers for views.
backgroundGroup: canvas.addGroup({ zIndex: GROUP_Z_INDEX.BG }),
middleGroup: canvas.addGroup({ zIndex: GROUP_Z_INDEX.MID }),
foregroundGroup: canvas.addGroup({ zIndex: GROUP_Z_INDEX.FORE }),
padding: padding,
visible: visible,
options: options,
limitInPlot: limitInPlot,
theme: theme,
}) || this;
/**
* when container size changed, change chart size props, and re-render.
*/
_this.onResize = debounce(function () {
_this.forceFit();
}, 300);
_this.ele = ele;
_this.canvas = canvas;
_this.width = size.width;
_this.height = size.height;
_this.autoFit = autoFit;
_this.localRefresh = localRefresh;
_this.renderer = renderer;
_this.wrapperElement = wrapperElement;
// 自适应大小
_this.updateCanvasStyle();
_this.bindAutoFit();
_this.initDefaultInteractions(defaultInteractions);
return _this;
}
Chart.prototype.initDefaultInteractions = function (interactions) {
var _this = this;
each(interactions, function (interaction) {
_this.interaction(interaction);
});
};
/**
* 改变图表大小同时重新渲染
* @param width 图表宽度
* @param height 图表高度
* @returns
*/
Chart.prototype.changeSize = function (width, height) {
this.width = width;
this.height = height;
this.canvas.changeSize(width, height);
// 重新渲染
this.render(true);
return this;
};
/**
* 销毁图表同时解绑事件销毁创建的 G.Canvas 实例
* @returns void
*/
Chart.prototype.destroy = function () {
_super.prototype.destroy.call(this);
this.unbindAutoFit();
this.canvas.destroy();
removeDom(this.wrapperElement);
this.wrapperElement = null;
};
/**
* 显示或隐藏图表
* @param visible 是否可见true 表示显示false 表示隐藏
* @returns
*/
Chart.prototype.changeVisible = function (visible) {
this.wrapperElement.style.display = visible ? '' : 'none';
return this;
};
/**
* 自动根据容器大小 resize 画布
*/
Chart.prototype.forceFit = function () {
// 注意第二参数用 true意思是即时 autoFit = falseforceFit() 调用之后一样是适配容器
var _a = getChartSize(this.ele, true, this.width, this.height), width = _a.width, height = _a.height;
this.changeSize(width, height);
};
Chart.prototype.updateCanvasStyle = function () {
modifyCSS(this.canvas.get('el'), {
display: 'inline-block',
verticalAlign: 'middle',
});
};
Chart.prototype.bindAutoFit = function () {
if (this.autoFit) {
window.addEventListener('resize', this.onResize);
}
};
Chart.prototype.unbindAutoFit = function () {
if (this.autoFit) {
window.removeEventListener('resize', this.onResize);
}
};
return Chart;
}(View));
export default Chart;
//# sourceMappingURL=chart.js.map