comparison src/djol/interaction/FeatureDrag.js @ 34:27e8e9e38e07 default tip

Слияние
author nickolay
date Wed, 05 Jun 2019 20:44:15 +0300
parents 8af8e840dd49 1dc2fd263b90
children
comparison
equal deleted inserted replaced
33:8af8e840dd49 34:27e8e9e38e07
1 define([ "dojo/_base/declare", "ol", "dojo/Evented" ], function(declare, ol,
2 Evented) {
3
4 var peekFirstFeature = function(map, coordinate, pixel) {
5 return map.forEachFeatureAtPixel(function(ft, layer) {
6 return ft;
7 });
8 };
9
10 var cls = declare([ ol.interaction.Pointer ], {
11 "-chains-" : {
12 constructor : "manual"
13 },
14
15 _peek : null,
16
17 _feature : null,
18
19 _coordinate : null,
20
21 cursor : "pointer",
22
23 _oldCursor : undefined,
24
25 /**
26 * Создает новый объект
27 *
28 * @param {Object}
29 * opts опции
30 * @param {Function}
31 * opts.peek Функция выбора фичи для перетаскивания
32 * function(map,coordinate,pixel), возвращает фичу
33 * @param {String}
34 * opts.cursor css курсор который будет использован при
35 * наведении и перетаскивании фичи
36 *
37 */
38 constructor : function(opts) {
39
40 ol.interaction.Pointer.apply(this, [{
41 handleDownEvent : this.handleDownEvent,
42 handleDragEvent : this.handleDragEvent,
43 handleMoveEvent : this.handleMoveEvent,
44 handleUpEvent : this.handleUpEvent
45 }]);
46 Evented.apply(this);
47
48 if (opts) {
49 if (opts.peek) {
50 this._peek = opts.peek;
51 } else {
52 this._peek = peekFirstFeature;
53 }
54 if ("cursor" in opts)
55 this.cursor = opts.cursor;
56 }
57 },
58
59 handleDownEvent : function(evt) {
60 var c = evt.coordinate;
61
62 var ft = this._peek(evt.map, c, evt.pixel);
63
64 if (ft) {
65 this._feature = ft;
66 this._coordinate = c;
67 this._emit("dragbegin", { feature : ft });
68 return true;
69 }
70
71 return false;
72 },
73
74 handleDragEvent : function(evt) {
75 var c1 = this._coordinate, c2 = evt.coordinate;
76
77 var dx = c2[0] - c1[0];
78 var dy = c2[1] - c1[1];
79
80 this._emit("dragging", { feature : this._feature, fromCoord : c1, toCoord : c2 });
81
82 this._feature.getGeometry().translate(dx, dy);
83
84 this._coordinate = c2;
85 },
86
87 handleUpEvent : function(evt) {
88 if (this._feature)
89 this._emit("dragend", { feature : this._feature });
90
91 this._feature = null;
92 this._coordinate = null;
93 return false;
94 },
95
96 handleMoveEvent : function(evt) {
97 if (this.cursor) {
98 var ft = this._feature || this._peek(evt.map, evt.coordinate , evt.pixel);
99
100 var element = evt.map.getTargetElement();
101 if (ft) {
102 if (element.style.cursor != this.cursor) {
103 this._oldCursor = element.style.cursor;
104 element.style.cursor = this.cursor;
105 }
106 } else if (this._oldCursor !== undefined) {
107 element.style.cursor = this._oldCursor;
108 this._oldCursor = undefined;
109 }
110 }
111 },
112
113 _emit : function(name, data) {
114 var evt = new ol.source.VectorEvent(name,this);
115
116 for(var p in data)
117 evt[p] = data[p];
118 this.dispatchEvent(evt);
119 }
120 });
121
122 return cls;
123 });