base.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  2. import { mix } from '../../util/common';
  3. import Context from './context';
  4. class Base {
  5. // 交互的上下文
  6. getDefaultCfg() {
  7. return {};
  8. }
  9. getInteractionContext(chart) {
  10. var interactionContext = chart.get('interactionContext');
  11. if (interactionContext) {
  12. return interactionContext;
  13. }
  14. interactionContext = new Context(chart);
  15. chart.set('interactionContext', interactionContext);
  16. return interactionContext;
  17. }
  18. constructor(cfg, chart) {
  19. var _this = this;
  20. _defineProperty(this, "type", '');
  21. _defineProperty(this, "startEvent", 'touchstart');
  22. _defineProperty(this, "processEvent", 'touchmove');
  23. _defineProperty(this, "endEvent", 'touchend');
  24. _defineProperty(this, "resetEvent", null);
  25. _defineProperty(this, "context", null);
  26. _defineProperty(this, "_start", function (ev) {
  27. _this.preStart && _this.preStart(ev);
  28. _this.start(ev);
  29. _this.onStart && _this.onStart(ev);
  30. });
  31. _defineProperty(this, "_process", function (ev) {
  32. _this.preProcess && _this.preProcess(ev);
  33. _this.process(ev);
  34. _this.onProcess && _this.onProcess(ev);
  35. });
  36. _defineProperty(this, "_end", function (ev) {
  37. _this.preEnd && _this.preEnd(ev);
  38. _this.end(ev);
  39. _this.onEnd && _this.onEnd(ev);
  40. });
  41. _defineProperty(this, "_reset", function (ev) {
  42. _this.preReset && _this.preReset(ev);
  43. _this.reset(ev);
  44. _this.onReset && _this.onReset(ev);
  45. });
  46. mix(this, this.getDefaultCfg(), cfg);
  47. this.context = this.getInteractionContext(chart);
  48. this.chart = chart; // 只处理range, 暂时先这么处理后面再看情况调整
  49. var {
  50. range
  51. } = this;
  52. if (range) {
  53. this.context.range = range;
  54. }
  55. this._bindEvents(chart);
  56. }
  57. _bindEvents(chart) {
  58. var {
  59. startEvent,
  60. processEvent,
  61. endEvent,
  62. resetEvent
  63. } = this;
  64. var canvas = chart.get('canvas'); // 统一绑定事件
  65. canvas.on(startEvent, this._start);
  66. canvas.on(processEvent, this._process);
  67. canvas.on(endEvent, this._end);
  68. canvas.on(resetEvent, this._reset);
  69. }
  70. _clearEvents() {
  71. var {
  72. chart,
  73. startEvent,
  74. processEvent,
  75. endEvent,
  76. resetEvent
  77. } = this;
  78. var canvas = chart.get('canvas'); // 统一绑定事件
  79. canvas.off(startEvent, this._start);
  80. canvas.off(processEvent, this._process);
  81. canvas.off(endEvent, this._end);
  82. canvas.off(resetEvent, this._start);
  83. }
  84. // override
  85. start() {} // override
  86. process() {} // override
  87. end() {} // override
  88. reset() {}
  89. destroy() {
  90. this.context.destroy();
  91. this._clearEvents();
  92. }
  93. }
  94. export default Base;