NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/component/lib/tooltip/crosshair.js
2023-09-14 14:47:11 +08:00

276 lines
8.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
var Component = require('../component');
var Util = require('../util');
var Crosshair = /*#__PURE__*/function (_Component) {
_inheritsLoose(Crosshair, _Component);
var _super = _createSuper(Crosshair);
var _proto = Crosshair.prototype;
_proto.getDefaultCfg = function getDefaultCfg() {
var cfg = _Component.prototype.getDefaultCfg.call(this);
return Util.mix({}, cfg, {
/**
* crosshair的类型
* @type {String}
*/
type: null,
/**
* 画在哪层视图
* @type {G-Element}
*/
plot: null,
/**
* x轴上移动到位置的偏移量
* @type {Number}
*/
plotRange: null,
/**
* 默认rect crosshair样式
* @type {Object}
*/
rectStyle: {
fill: '#CCD6EC',
opacity: 0.3
},
/**
* 默认line crosshair样式
* @type {Object}
*/
lineStyle: {
stroke: 'rgba(0, 0, 0, 0.25)',
lineWidth: 1
},
isTransposed: false
});
};
function Crosshair(cfg) {
var _this;
_this = _Component.call(this, cfg) || this;
_this._init_();
_this.render();
return _this;
}
_proto._init_ = function _init_() {
var self = this;
var plot = self.get('plot');
var group;
if (self.type === 'rect') {
group = plot.addGroup({
zIndex: 0
});
} else {
group = plot.addGroup();
}
this.set('container', group);
};
_proto._addLineShape = function _addLineShape(attrs, type) {
var container = this.get('container');
var shape = container.addShape('line', {
capture: false,
attrs: attrs
}); // shape.hide();
this.set('crossLineShape' + type, shape);
return shape;
};
_proto._renderHorizontalLine = function _renderHorizontalLine(canvas, plotRange) {
var style = Util.mix(this.get('lineStyle'), this.get('style'));
var attrs = Util.mix({
x1: plotRange ? plotRange.bl.x : canvas.get('width'),
y1: 0,
x2: plotRange ? plotRange.br.x : 0,
y2: 0
}, style);
this._addLineShape(attrs, 'X');
};
_proto._renderVerticalLine = function _renderVerticalLine(canvas, plotRange) {
var style = Util.mix(this.get('lineStyle'), this.get('style'));
var attrs = Util.mix({
x1: 0,
y1: plotRange ? plotRange.bl.y : canvas.get('height'),
x2: 0,
y2: plotRange ? plotRange.tl.y : 0
}, style);
this._addLineShape(attrs, 'Y');
};
_proto._renderBackground = function _renderBackground(canvas, plotRange) {
var style = Util.mix(this.get('rectStyle'), this.get('style'));
var container = this.get('container');
var attrs = Util.mix({
x: plotRange ? plotRange.tl.x : 0,
y: plotRange ? plotRange.tl.y : canvas.get('height'),
width: plotRange ? plotRange.br.x - plotRange.bl.x : canvas.get('width'),
height: plotRange ? Math.abs(plotRange.tl.y - plotRange.bl.y) : canvas.get('height')
}, style);
var shape = container.addShape('rect', {
attrs: attrs,
capture: false
}); // shape.hide();
this.set('crosshairsRectShape', shape);
return shape;
};
_proto._updateRectShape = function _updateRectShape(items) {
var offset;
var crosshairsRectShape = this.get('crosshairsRectShape');
var isTransposed = this.get('isTransposed');
var firstItem = items[0];
var lastItem = items[items.length - 1];
var dim = isTransposed ? 'y' : 'x';
var attr = isTransposed ? 'height' : 'width';
var startDim = firstItem[dim];
if (items.length > 1 && firstItem[dim] > lastItem[dim]) {
startDim = lastItem[dim];
}
if (this.get('width')) {
// 用户定义了 width
crosshairsRectShape.attr(dim, startDim - this.get('crosshairs').width / 2);
crosshairsRectShape.attr(attr, this.get('width'));
} else {
if (Util.isArray(firstItem.point[dim]) && !firstItem.size) {
// 直方图
var width = firstItem.point[dim][1] - firstItem.point[dim][0];
crosshairsRectShape.attr(dim, firstItem.point[dim][0]);
crosshairsRectShape.attr(attr, width);
} else {
offset = 3 * firstItem.size / 4;
crosshairsRectShape.attr(dim, startDim - offset);
if (items.length === 1) {
crosshairsRectShape.attr(attr, 3 * firstItem.size / 2);
} else {
crosshairsRectShape.attr(attr, Math.abs(lastItem[dim] - firstItem[dim]) + 2 * offset);
}
}
}
};
_proto.render = function render() {
var canvas = this.get('canvas');
var plotRange = this.get('plotRange');
var isTransposed = this.get('isTransposed');
this.clear();
switch (this.get('type')) {
case 'x':
this._renderHorizontalLine(canvas, plotRange);
break;
case 'y':
this._renderVerticalLine(canvas, plotRange);
break;
case 'cross':
this._renderHorizontalLine(canvas, plotRange);
this._renderVerticalLine(canvas, plotRange);
break;
case 'rect':
this._renderBackground(canvas, plotRange);
break;
default:
isTransposed ? this._renderHorizontalLine(canvas, plotRange) : this._renderVerticalLine(canvas, plotRange);
}
};
_proto.show = function show() {
var container = this.get('container');
_Component.prototype.show.call(this);
container.show();
};
_proto.hide = function hide() {
var container = this.get('container');
_Component.prototype.hide.call(this);
container.hide();
};
_proto.clear = function clear() {
var container = this.get('container');
this.set('crossLineShapeX', null);
this.set('crossLineShapeY', null);
this.set('crosshairsRectShape', null);
_Component.prototype.clear.call(this);
container.clear();
};
_proto.destroy = function destroy() {
var container = this.get('container');
_Component.prototype.destroy.call(this);
container.remove();
};
_proto.setPosition = function setPosition(x, y, items) {
var crossLineShapeX = this.get('crossLineShapeX');
var crossLineShapeY = this.get('crossLineShapeY');
var crosshairsRectShape = this.get('crosshairsRectShape');
if (crossLineShapeY && !crossLineShapeY.get('destroyed')) {
// 第一次进入时画布需要单独绘制所以需要先设定corss的位置
crossLineShapeY.move(x, 0);
}
if (crossLineShapeX && !crossLineShapeX.get('destroyed')) {
crossLineShapeX.move(0, y);
}
if (crosshairsRectShape && !crosshairsRectShape.get('destroyed')) {
this._updateRectShape(items);
}
};
return Crosshair;
}(Component);
module.exports = Crosshair;