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 = ['start', 'process', 'end', 'reset'];
|
9 |
|
10 | class 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 |
|
48 | }
|
49 | process() {
|
50 |
|
51 | }
|
52 | end() {
|
53 |
|
54 | }
|
55 | reset() {
|
56 |
|
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 |
|
92 | module.exports = Interaction; |
\ | No newline at end of file |