html.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var tslib_1 = require("tslib");
  4. var dom_util_1 = require("@antv/dom-util");
  5. var util_1 = require("@antv/util");
  6. var util_2 = require("../util/util");
  7. var html_component_1 = require("../abstract/html-component");
  8. var CssConst = require("./css-const");
  9. var html_theme_1 = require("./html-theme");
  10. var HtmlCrosshair = /** @class */ (function (_super) {
  11. tslib_1.__extends(HtmlCrosshair, _super);
  12. function HtmlCrosshair() {
  13. return _super !== null && _super.apply(this, arguments) || this;
  14. }
  15. HtmlCrosshair.prototype.getDefaultCfg = function () {
  16. var cfg = _super.prototype.getDefaultCfg.call(this);
  17. return tslib_1.__assign(tslib_1.__assign({}, cfg), { name: 'crosshair', type: 'html', locationType: 'region', start: { x: 0, y: 0 }, end: { x: 0, y: 0 }, capture: false, text: null, containerTpl: "<div class=\"" + CssConst.CONTAINER_CLASS + "\"></div>", crosshairTpl: "<div class=\"" + CssConst.CROSSHAIR_LINE + "\"></div>", textTpl: "<span class=\"" + CssConst.CROSSHAIR_TEXT + "\">{content}</span>", domStyles: null, containerClassName: CssConst.CONTAINER_CLASS, defaultStyles: html_theme_1.default, defaultCfg: {
  18. text: {
  19. position: 'start',
  20. content: null,
  21. align: 'center',
  22. offset: 10
  23. }
  24. } });
  25. };
  26. HtmlCrosshair.prototype.render = function () {
  27. this.resetText();
  28. this.resetPosition();
  29. };
  30. // 绘制 crosshair
  31. HtmlCrosshair.prototype.initCrossHair = function () {
  32. var container = this.getContainer();
  33. var crosshairTpl = this.get('crosshairTpl');
  34. var crosshairEl = dom_util_1.createDom(crosshairTpl);
  35. container.appendChild(crosshairEl);
  36. this.applyStyle(CssConst.CROSSHAIR_LINE, crosshairEl);
  37. this.set('crosshairEl', crosshairEl);
  38. };
  39. // 获取文本的位置
  40. HtmlCrosshair.prototype.getTextPoint = function () {
  41. var _a = this.getLocation(), start = _a.start, end = _a.end;
  42. var _b = this.get('text'), position = _b.position, offset = _b.offset;
  43. return util_2.getTextPoint(start, end, position, offset);
  44. };
  45. // 设置 text
  46. HtmlCrosshair.prototype.resetText = function () {
  47. var text = this.get('text');
  48. var textEl = this.get('textEl');
  49. if (text) {
  50. var content = text.content;
  51. if (!textEl) {
  52. var container = this.getContainer();
  53. var textTpl = util_1.substitute(this.get('textTpl'), text);
  54. textEl = dom_util_1.createDom(textTpl);
  55. container.appendChild(textEl);
  56. this.applyStyle(CssConst.CROSSHAIR_TEXT, textEl);
  57. this.set('textEl', textEl);
  58. }
  59. textEl.innerHTML = content;
  60. }
  61. else if (textEl) {
  62. textEl.remove();
  63. }
  64. };
  65. // 是否垂直
  66. HtmlCrosshair.prototype.isVertical = function (start, end) {
  67. return start.x === end.x;
  68. };
  69. // 重新调整位置
  70. HtmlCrosshair.prototype.resetPosition = function () {
  71. var crosshairEl = this.get('crosshairEl');
  72. if (!crosshairEl) {
  73. this.initCrossHair();
  74. crosshairEl = this.get('crosshairEl');
  75. }
  76. var start = this.get('start');
  77. var end = this.get('end');
  78. var minX = Math.min(start.x, end.x);
  79. var minY = Math.min(start.y, end.y);
  80. if (this.isVertical(start, end)) {
  81. dom_util_1.modifyCSS(crosshairEl, {
  82. width: '1px',
  83. height: util_2.toPx(Math.abs(end.y - start.y))
  84. });
  85. }
  86. else {
  87. dom_util_1.modifyCSS(crosshairEl, {
  88. height: '1px',
  89. width: util_2.toPx(Math.abs(end.x - start.x))
  90. });
  91. }
  92. dom_util_1.modifyCSS(crosshairEl, {
  93. top: util_2.toPx(minY),
  94. left: util_2.toPx(minX)
  95. });
  96. this.alignText();
  97. };
  98. HtmlCrosshair.prototype.alignText = function () {
  99. // 重新设置 text 位置
  100. var textEl = this.get('textEl');
  101. if (textEl) {
  102. var align = this.get('text').align;
  103. var clientWidth = textEl.clientWidth;
  104. var point = this.getTextPoint();
  105. switch (align) {
  106. case 'center':
  107. point.x = point.x - clientWidth / 2;
  108. break;
  109. case 'right':
  110. point.x = point.x - clientWidth;
  111. case 'left':
  112. break;
  113. }
  114. dom_util_1.modifyCSS(textEl, {
  115. top: util_2.toPx(point.y),
  116. left: util_2.toPx(point.x)
  117. });
  118. }
  119. };
  120. HtmlCrosshair.prototype.updateInner = function (cfg) {
  121. if (util_1.hasKey(cfg, 'text')) {
  122. this.resetText();
  123. }
  124. _super.prototype.updateInner.call(this, cfg);
  125. };
  126. return HtmlCrosshair;
  127. }(html_component_1.default));
  128. exports.default = HtmlCrosshair;
  129. //# sourceMappingURL=html.js.map