UNPKG

2.88 kBJavaScriptView Raw
1const Util = require('./util');
2const Interaction = require('./base');
3
4class Select extends Interaction {
5 getDefaultCfg() {
6 const defaultCfg = super.getDefaultCfg();
7 return Util.mix({}, defaultCfg, {
8 startEvent: 'mouseup',
9 processEvent: null,
10 selectStyle: {
11 fillOpacity: 1
12 },
13 unSelectStyle: {
14 fillOpacity: 0.1
15 },
16 cancelable: true
17 });
18 }
19
20 start(ev) {
21 const self = this;
22 const chart = self.view;
23
24 let selectedShape;
25 const unSelectedShapes = [];
26 chart.eachShape((obj, shape) => {
27 if (shape.isPointInPath(ev.x, ev.y)) {
28 selectedShape = shape;
29 } else {
30 unSelectedShapes.push(shape);
31 }
32 });
33
34 if (!selectedShape) {
35 self.reset();
36 return;
37 }
38
39 if (selectedShape.get('_selected')) {
40 // 已经被选中
41 if (!self.cancelable) {
42 // 不允许取消选中则不处理
43 return;
44 }
45 self.reset(); // 允许取消选中
46 } else {
47 // 未被选中
48 const { selectStyle, unSelectStyle } = self;
49
50 if (!selectedShape.get('_originAttrs')) {
51 const originAttrs = Object.assign({}, selectedShape.attr());
52 selectedShape.set('_originAttrs', originAttrs);
53 }
54
55 selectedShape.attr(Object.assign({}, selectedShape.get('_originAttrs'), selectStyle));
56
57 Util.each(unSelectedShapes, child => {
58 if (!child.get('_originAttrs')) {
59 const originAttrs = Object.assign({}, child.attr());
60 child.set('_originAttrs', originAttrs);
61 } else {
62 child.attr(child.get('_originAttrs'));
63 }
64 child.set('_selected', false);
65 unSelectStyle && child.attr(Object.assign({}, child.get('_originAttrs'), unSelectStyle));
66 });
67
68 selectedShape.set('_selected', true);
69 self.selectedShape = selectedShape;
70 self.canvas.draw();
71 }
72 }
73
74 end(ev) {
75 const selectedShape = this.selectedShape;
76 if (selectedShape && !selectedShape.get('destroyed') && selectedShape.get('origin')) {
77 ev.data = selectedShape.get('origin')._origin; // 绘制数据,包含原始数据啊
78 ev.shapeInfo = selectedShape.get('origin');
79 ev.shape = selectedShape;
80 ev.selected = !!selectedShape.get('_selected'); // 返回选中的状态
81 }
82 }
83
84 reset() {
85 const self = this;
86 if (!self.selectedShape) {
87 return;
88 }
89 const chart = self.view;
90 const geom = chart.get('geoms')[0];
91 const container = geom.get('container').get('children')[0];
92 const children = container.get('children');
93
94 Util.each(children, child => {
95 const originAttrs = child.get('_originAttrs');
96 if (originAttrs) {
97 child.__attrs = originAttrs;
98 child.set('_originAttrs', null);
99 }
100 child.set('_selected', false);
101 });
102 self.canvas.draw();
103 }
104}
105
106module.exports = Select;
\No newline at end of file