NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/component/lib/tooltip/crosshair.js

276 lines
8.0 KiB
JavaScript
Raw Normal View History

2023-09-14 14:47:11 +08:00
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;