base.js 3.3 KB

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