interval-label.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. "use strict";
  2. var Util = require('../util/common');
  3. var DEFAULT_CFG = {
  4. label: null,
  5. offsetX: 0,
  6. offsetY: 0
  7. };
  8. var DEFAULT_LABEL_CFG = {
  9. textBaseline: 'middle',
  10. fill: '#808080'
  11. }; // 2个点的中心点
  12. function getMiddlePoint(a, b) {
  13. var x = (a.x - b.x) / 2 + b.x;
  14. var y = (a.y - b.y) / 2 + b.y;
  15. return {
  16. x: x,
  17. y: y
  18. };
  19. } // function getLabelPoint(points, nextPoints) {
  20. // let start;
  21. // if (nextPoints && nextPoints.length) {
  22. // start = getMiddlePoint(points[1], nextPoints[1]);
  23. // } else {
  24. // const nextPoint = getMiddlePoint(points[2], points[3]);
  25. // start = getMiddlePoint(points[1], nextPoint);
  26. // }
  27. // const end = getMiddlePoint(points[1], points[2]);
  28. // return { start, end };
  29. // }
  30. var Controller = /*#__PURE__*/function () {
  31. function Controller(_ref) {
  32. var chart = _ref.chart,
  33. container = _ref.container;
  34. this.cfg = null;
  35. this.chart = chart;
  36. this.container = container;
  37. }
  38. var _proto = Controller.prototype;
  39. _proto.draw = function draw() {
  40. var chart = this.chart,
  41. container = this.container,
  42. cfg = this.cfg;
  43. if (!cfg) return;
  44. var labelCfg = Util.mix({}, DEFAULT_CFG, cfg);
  45. var coord = chart.get('coord');
  46. var geom = chart.get('geoms')[0];
  47. var shapes = geom.get('container').get('children');
  48. shapes.forEach(function (shape) {
  49. var origin = shape.get('origin');
  50. var _origin = origin._origin,
  51. color = origin.color,
  52. points = origin.points;
  53. if (labelCfg.label) {
  54. var labelAttrs = labelCfg.label(_origin, color);
  55. var group = container.addGroup();
  56. var point = coord.convertPoint(getMiddlePoint(points[1], points[2]));
  57. group.addShape('Text', {
  58. attrs: Util.mix({
  59. x: point.x + labelCfg.offsetX,
  60. y: point.y + labelCfg.offsetY
  61. }, labelAttrs, DEFAULT_LABEL_CFG)
  62. });
  63. }
  64. });
  65. };
  66. _proto.clear = function clear() {
  67. var container = this.container;
  68. container.clear();
  69. };
  70. return Controller;
  71. }();
  72. module.exports = {
  73. init: function init(chart) {
  74. var frontPlot = chart.get('frontPlot');
  75. var labelGroup = frontPlot.addGroup({
  76. className: 'label',
  77. zIndex: 0
  78. });
  79. var labelController = new Controller({
  80. chart: chart,
  81. container: labelGroup
  82. });
  83. chart.set('intervalLabelController', labelController);
  84. chart.intervalLabel = function (cfg) {
  85. labelController.cfg = cfg;
  86. };
  87. },
  88. afterGeomDraw: function afterGeomDraw(chart) {
  89. var labelController = chart.get('intervalLabelController');
  90. labelController.draw();
  91. },
  92. clearInner: function clearInner(chart) {
  93. var labelController = chart.get('intervalLabelController');
  94. labelController.clear();
  95. }
  96. };