annotate src/djol/interaction/FeatureDrag.js @ 20:9718e8de0cb2

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