base.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. /**
  3. * The parent class of interaction
  4. * @author sima.zhang1990@gmail.com
  5. */
  6. import './register';
  7. import { deepMix, isWx, isMy, addEventListener, removeEventListener } from '../util/common'; // import HammerUtil from 'hammerjs';
  8. var Hammer;
  9. if (!isWx && !isMy) {
  10. Hammer = require('hammerjs');
  11. }
  12. var TOUCH_EVENTS = ['touchstart', 'touchmove', 'touchend'];
  13. class Interaction {
  14. getDefaultCfg() {
  15. return {
  16. startEvent: TOUCH_EVENTS[0],
  17. processEvent: TOUCH_EVENTS[1],
  18. endEvent: TOUCH_EVENTS[2],
  19. resetEvent: null
  20. };
  21. }
  22. // override
  23. start() {} // override
  24. process() {} // override
  25. end() {} // override
  26. reset() {}
  27. constructor(cfg, chart) {
  28. var _this = this;
  29. _defineProperty(this, "_start", function (ev) {
  30. _this.preStart && _this.preStart(ev);
  31. _this.start(ev);
  32. _this.onStart && _this.onStart(ev);
  33. });
  34. _defineProperty(this, "_process", function (ev) {
  35. _this.preProcess && _this.preProcess(ev);
  36. _this.process(ev);
  37. _this.onProcess && _this.onProcess(ev);
  38. });
  39. _defineProperty(this, "_end", function (ev) {
  40. _this.preEnd && _this.preEnd(ev);
  41. _this.end(ev);
  42. _this.onEnd && _this.onEnd(ev);
  43. });
  44. _defineProperty(this, "_reset", function (ev) {
  45. _this.preReset && _this.preReset(ev);
  46. _this.reset(ev);
  47. _this.onReset && _this.onReset(ev);
  48. });
  49. var defaultCfg = this.getDefaultCfg();
  50. deepMix(this, defaultCfg, cfg);
  51. this.chart = chart;
  52. this.canvas = chart.get('canvas');
  53. this.el = chart.get('canvas').get('el');
  54. this._bindEvents();
  55. }
  56. _bindEvents() {
  57. this._clearEvents(); // clear events
  58. var {
  59. startEvent,
  60. processEvent,
  61. endEvent,
  62. resetEvent,
  63. el
  64. } = this;
  65. if (Hammer) {
  66. this.hammer = new Hammer(el);
  67. }
  68. this._bindEvent(startEvent, this._start);
  69. this._bindEvent(processEvent, this._process);
  70. this._bindEvent(endEvent, this._end);
  71. this._bindEvent(resetEvent, this._reset);
  72. }
  73. _clearEvents() {
  74. var {
  75. startEvent,
  76. processEvent,
  77. endEvent,
  78. resetEvent
  79. } = this;
  80. if (this.hammer) {
  81. this.hammer.destroy();
  82. this.hammer = null;
  83. }
  84. this._clearTouchEvent(startEvent, this._start);
  85. this._clearTouchEvent(processEvent, this._process);
  86. this._clearTouchEvent(endEvent, this._end);
  87. this._clearTouchEvent(resetEvent, this._reset);
  88. }
  89. _bindEvent(eventName, method) {
  90. var el = this.el;
  91. if (eventName) {
  92. if (TOUCH_EVENTS.indexOf(eventName) !== -1) {
  93. addEventListener(el, eventName, method);
  94. } else if (this.hammer) {
  95. this.hammer.on(eventName, method);
  96. }
  97. }
  98. }
  99. _clearTouchEvent(eventName, method) {
  100. var el = this.el;
  101. if (eventName && TOUCH_EVENTS.indexOf(eventName) !== -1) {
  102. removeEventListener(el, eventName, method);
  103. }
  104. }
  105. destroy() {
  106. this._clearEvents();
  107. }
  108. }
  109. export default Interaction;