UNPKG

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