interval-label.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import { mix } from '../util/common';
  2. var DEFAULT_CFG = {
  3. label: null,
  4. offsetX: 0,
  5. offsetY: 0
  6. };
  7. var DEFAULT_LABEL_CFG = {
  8. textBaseline: 'middle',
  9. fill: '#808080'
  10. }; // 2个点的中心点
  11. function getMiddlePoint(a, b) {
  12. var x = (a.x - b.x) / 2 + b.x;
  13. var y = (a.y - b.y) / 2 + b.y;
  14. return {
  15. x,
  16. y
  17. };
  18. } // function getLabelPoint(points, nextPoints) {
  19. // let start;
  20. // if (nextPoints && nextPoints.length) {
  21. // start = getMiddlePoint(points[1], nextPoints[1]);
  22. // } else {
  23. // const nextPoint = getMiddlePoint(points[2], points[3]);
  24. // start = getMiddlePoint(points[1], nextPoint);
  25. // }
  26. // const end = getMiddlePoint(points[1], points[2]);
  27. // return { start, end };
  28. // }
  29. class Controller {
  30. constructor(_ref) {
  31. var {
  32. chart,
  33. container
  34. } = _ref;
  35. this.cfg = null;
  36. this.chart = chart;
  37. this.container = container;
  38. }
  39. draw() {
  40. var {
  41. chart,
  42. container,
  43. cfg
  44. } = this;
  45. if (!cfg) return;
  46. var labelCfg = mix({}, DEFAULT_CFG, cfg);
  47. var geom = chart.get('geoms')[0];
  48. var shapes = geom.get('container').get('children');
  49. shapes.forEach(function (shape) {
  50. var origin = shape.get('origin');
  51. var attrs = shape.get('attrs');
  52. var {
  53. _origin,
  54. color
  55. } = origin;
  56. var {
  57. points
  58. } = attrs;
  59. if (labelCfg.label) {
  60. var labelAttrs = labelCfg.label(_origin, color);
  61. var point = getMiddlePoint(points[1], points[2]);
  62. container.addShape('Text', {
  63. attrs: mix({
  64. x: point.x + labelCfg.offsetX,
  65. y: point.y + labelCfg.offsetY
  66. }, DEFAULT_LABEL_CFG, labelAttrs)
  67. });
  68. }
  69. if (labelCfg.guide) {
  70. var _labelAttrs = labelCfg.guide(_origin, color);
  71. var _point = getMiddlePoint(getMiddlePoint(points[0], points[1]), getMiddlePoint(points[2], points[3] || points[2]));
  72. container.addShape('Text', {
  73. attrs: mix({
  74. x: _point.x,
  75. y: _point.y,
  76. textBaseline: 'middle',
  77. textAlign: 'center'
  78. }, DEFAULT_LABEL_CFG, _labelAttrs)
  79. });
  80. }
  81. });
  82. }
  83. clear() {
  84. var {
  85. container
  86. } = this;
  87. container.clear();
  88. }
  89. }
  90. function init(chart) {
  91. var frontPlot = chart.get('frontPlot');
  92. var labelGroup = frontPlot.addGroup({
  93. className: 'label',
  94. zIndex: 0
  95. });
  96. var labelController = new Controller({
  97. chart,
  98. container: labelGroup
  99. });
  100. chart.set('intervalLabelController', labelController);
  101. chart.intervalLabel = function (cfg) {
  102. labelController.cfg = cfg;
  103. };
  104. }
  105. function afterGeomDraw(chart) {
  106. var labelController = chart.get('intervalLabelController');
  107. labelController.draw();
  108. }
  109. function clearInner(chart) {
  110. var labelController = chart.get('intervalLabelController');
  111. labelController.clear();
  112. }
  113. export { init, afterGeomDraw, clearInner };
  114. export default {
  115. init,
  116. afterGeomDraw,
  117. clearInner
  118. };