CartesianAxisPointer.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. var graphic = require("../../util/graphic");
  2. var BaseAxisPointer = require("./BaseAxisPointer");
  3. var viewHelper = require("./viewHelper");
  4. var cartesianAxisHelper = require("../axis/cartesianAxisHelper");
  5. var AxisView = require("../axis/AxisView");
  6. var CartesianAxisPointer = BaseAxisPointer.extend({
  7. /**
  8. * @override
  9. */
  10. makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {
  11. var axis = axisModel.axis;
  12. var grid = axis.grid;
  13. var axisPointerType = axisPointerModel.get('type');
  14. var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();
  15. var pixelValue = axis.toGlobalCoord(axis.dataToCoord(value, true));
  16. if (axisPointerType && axisPointerType !== 'none') {
  17. var elStyle = viewHelper.buildElStyle(axisPointerModel);
  18. var pointerOption = pointerShapeBuilder[axisPointerType](axis, pixelValue, otherExtent, elStyle);
  19. pointerOption.style = elStyle;
  20. elOption.graphicKey = pointerOption.type;
  21. elOption.pointer = pointerOption;
  22. }
  23. var layoutInfo = cartesianAxisHelper.layout(grid.model, axisModel);
  24. viewHelper.buildCartesianSingleLabelElOption(value, elOption, layoutInfo, axisModel, axisPointerModel, api);
  25. },
  26. /**
  27. * @override
  28. */
  29. getHandleTransform: function (value, axisModel, axisPointerModel) {
  30. var layoutInfo = cartesianAxisHelper.layout(axisModel.axis.grid.model, axisModel, {
  31. labelInside: false
  32. });
  33. layoutInfo.labelMargin = axisPointerModel.get('handle.margin');
  34. return {
  35. position: viewHelper.getTransformedPosition(axisModel.axis, value, layoutInfo),
  36. rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)
  37. };
  38. },
  39. /**
  40. * @override
  41. */
  42. updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) {
  43. var axis = axisModel.axis;
  44. var grid = axis.grid;
  45. var axisExtent = axis.getGlobalExtent(true);
  46. var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();
  47. var dimIndex = axis.dim === 'x' ? 0 : 1;
  48. var currPosition = transform.position;
  49. currPosition[dimIndex] += delta[dimIndex];
  50. currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);
  51. currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);
  52. var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;
  53. var cursorPoint = [cursorOtherValue, cursorOtherValue];
  54. cursorPoint[dimIndex] = currPosition[dimIndex]; // Make tooltip do not overlap axisPointer and in the middle of the grid.
  55. var tooltipOptions = [{
  56. verticalAlign: 'middle'
  57. }, {
  58. align: 'center'
  59. }];
  60. return {
  61. position: currPosition,
  62. rotation: transform.rotation,
  63. cursorPoint: cursorPoint,
  64. tooltipOption: tooltipOptions[dimIndex]
  65. };
  66. }
  67. });
  68. function getCartesian(grid, axis) {
  69. var opt = {};
  70. opt[axis.dim + 'AxisIndex'] = axis.index;
  71. return grid.getCartesian(opt);
  72. }
  73. var pointerShapeBuilder = {
  74. line: function (axis, pixelValue, otherExtent, elStyle) {
  75. var targetShape = viewHelper.makeLineShape([pixelValue, otherExtent[0]], [pixelValue, otherExtent[1]], getAxisDimIndex(axis));
  76. graphic.subPixelOptimizeLine({
  77. shape: targetShape,
  78. style: elStyle
  79. });
  80. return {
  81. type: 'Line',
  82. shape: targetShape
  83. };
  84. },
  85. shadow: function (axis, pixelValue, otherExtent, elStyle) {
  86. var bandWidth = axis.getBandWidth();
  87. var span = otherExtent[1] - otherExtent[0];
  88. return {
  89. type: 'Rect',
  90. shape: viewHelper.makeRectShape([pixelValue - bandWidth / 2, otherExtent[0]], [bandWidth, span], getAxisDimIndex(axis))
  91. };
  92. }
  93. };
  94. function getAxisDimIndex(axis) {
  95. return axis.dim === 'x' ? 0 : 1;
  96. }
  97. AxisView.registerAxisPointerClass('CartesianAxisPointer', CartesianAxisPointer);
  98. var _default = CartesianAxisPointer;
  99. module.exports = _default;