1 | const G = require('@antv/g/lib');
|
2 | const EventUtil = require('@antv/util/lib/event');
|
3 | const DomUtil = G.DomUtil;
|
4 | const CommonUtil = G.CommonUtil;
|
5 |
|
6 | const assign = CommonUtil.assign;
|
7 |
|
8 | const EVENT_TYPES = [
|
9 | 'start',
|
10 | 'process',
|
11 | 'end',
|
12 | 'reset'
|
13 | ];
|
14 |
|
15 | class 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 |
|
54 | }
|
55 | process() {
|
56 |
|
57 | }
|
58 | end() {
|
59 |
|
60 | }
|
61 | reset() {
|
62 |
|
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 |
|
98 | module.exports = Interaction;
|