| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- import { deepMix, isNil, isFunction, isString } from '../../util/common';
- var KEYWORDS_PERCENT = {
- min: 0,
- median: 0.5,
- max: 1
- };
- class GuideBase {
- _initDefaultCfg() {}
- constructor(cfg) {
- this._initDefaultCfg();
- deepMix(this, cfg);
- }
- _getNormalizedValue(val, scale) {
- var rst;
- if (isNil(KEYWORDS_PERCENT[val])) {
- rst = scale.scale(val);
- } else {
- rst = KEYWORDS_PERCENT[val];
- }
- return rst;
- }
- parsePercentPoint(coord, position) {
- var xPercent = parseFloat(position[0]) / 100;
- var yPercent = parseFloat(position[1]) / 100;
- var start = coord.start;
- var end = coord.end;
- var width = Math.abs(start.x - end.x);
- var height = Math.abs(start.y - end.y);
- var x = width * xPercent + Math.min(start.x, end.x);
- var y = height * yPercent + Math.min(start.y, end.y);
- return {
- x,
- y
- };
- }
- parsePoint(coord, position) {
- var self = this;
- var xScale = self.xScale;
- var yScales = self.yScales;
- if (isFunction(position)) {
- position = position(xScale, yScales); // position 必须是对象
- } // 如果数据格式是 ['50%', '50%'] 的格式
- // fix: 原始数据中可能会包含 'xxx5%xxx' 这样的数据,需要判断下 https://github.com/antvis/f2/issues/590
- if (isString(position[0]) && position[0].indexOf('%') !== -1 && !isNaN(position[0].slice(0, -1))) {
- return this.parsePercentPoint(coord, position);
- }
- var x = self._getNormalizedValue(position[0], xScale);
- var y = self._getNormalizedValue(position[1], yScales[0]);
- var point = coord.convertPoint({
- x,
- y
- });
- if (self.limitInPlot) {
- // limit in chart plotRange
- if (x >= 0 && x <= 1 && y >= 0 && y <= 1) {
- return point;
- }
- return null;
- }
- return point;
- }
- /**
- * render the guide component
- * @param {Coord} coord coordinate instance
- * @param {Canvas.Group} group the container
- */
- render()
- /* coord,group */
- {}
- repaint() {
- this.remove();
- var {
- coord,
- container,
- canvas
- } = this;
- if (container && !container.isDestroyed()) {
- this.render(coord, container);
- canvas.draw();
- }
- }
- remove() {
- var {
- element
- } = this;
- element && element.remove(true);
- }
- changeVisible(visible) {
- var self = this;
- self.visible = visible;
- var element = self.element;
- if (!element) return;
- if (element.set) {
- element.set('visible', visible);
- } else {
- element.style.display = visible ? '' : 'none';
- }
- }
- }
- export default GuideBase;
|