UNPKG

1.99 kBJavaScriptView Raw
1const G = require('@antv/g/lib');
2const EventUtil = require('@antv/util/lib/event');
3const DomUtil = G.DomUtil;
4const CommonUtil = G.CommonUtil;
5
6const assign = CommonUtil.assign;
7
8const EVENT_TYPES = [
9 'start',
10 'process',
11 'end',
12 'reset'
13];
14
15class Interaction {
16 getDefaultCfg() {
17 return {
18 startEvent: 'mousedown',
19 processEvent: 'mousemove',
20 endEvent: 'mouseup',
21 resetEvent: 'dblclick'
22 };
23 }
24
25 _start(ev) {
26 const me = this;
27 me.preStart && me.preStart(ev);
28 me.start(ev);
29 me.onStart && me.onStart(ev);
30 }
31 _process(ev) {
32 const me = this;
33 me.preProcess && me.preProcess(ev);
34 me.process(ev);
35 me.onProcess && me.onProcess(ev);
36 }
37 _end(ev) {
38 const me = this;
39 me.preEnd && me.preEnd(ev);
40 me.end(ev);
41 me.onEnd && me.onEnd(ev);
42 }
43
44 _reset(ev) {
45 const me = this;
46 me.preReset && me.preReset(ev);
47 me.reset(ev);
48 me.onReset && me.onReset(ev);
49 }
50
51
52 start() {
53 // TODO override
54 }
55 process() {
56 // TODO override
57 }
58 end() {
59 // TODO override
60 }
61 reset() {
62 // TODO override
63 }
64
65 constructor(cfg, view) {
66 const me = this;
67 const defaultCfg = me.getDefaultCfg();
68 assign(me, defaultCfg, cfg);
69 me.view = me.chart = view;
70 me.canvas = view.get('canvas');
71 me._bindEvents();
72 }
73
74 _bindEvents() {
75 const me = this;
76 const canvas = me.canvas;
77 const canvasDOM = canvas.get('canvasDOM');
78 me._clearEvents();
79 CommonUtil.each(EVENT_TYPES, type => {
80 const ucType = CommonUtil.upperFirst(type);
81 me[`_on${ucType}Listener`] = DomUtil.addEventListener(canvasDOM, me[`${type}Event`], EventUtil.wrapBehavior(me, `_${type}`));
82 });
83 }
84
85 _clearEvents() {
86 const me = this;
87 CommonUtil.each(EVENT_TYPES, type => {
88 const listenerName = `_on${CommonUtil.upperFirst(type)}Listener`;
89 me[listenerName] && me[listenerName].remove();
90 });
91 }
92
93 destroy() {
94 this._clearEvents();
95 }
96}
97
98module.exports = Interaction;