-
Notifications
You must be signed in to change notification settings - Fork 83
/
cross-control.js
87 lines (82 loc) · 2.91 KB
/
cross-control.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/**
* Класс контрола "центр карты".
* @class
* @name CrossControl
*/
function CrossControl(options) {
this.events = new ymaps.event.Manager();
this.options = new ymaps.option.Manager();
}
ymaps.ready(function () {
/**
* Макет контрола.
* @see http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/templateLayoutFactory.xml
* @class
* @name CrossControl.Layout
*/
CrossControl.Layout = ymaps.templateLayoutFactory.createClass(
'<div class="cross-control" style="right:$[options.position.right]px; top:$[options.position.top]px;"></div>'
);
});
/**
* @lends CrossControl.prototype
*/
CrossControl.prototype = {
/**
* @constructor
*/
constructor: CrossControl,
/**
* Устанавливает родительский объект.
* @function
* @name CrossControl.setParent
* @param {IControlParent} parent Родительский объект.
* @returns {CrossControl} Возвращает ссылку на себя.
*/
setParent: function (parent) {
this.parent = parent;
if(parent) {
var map = parent.getMap();
this._setPosition(map.container.getSize());
map.container.events.add('sizechange', this._setPosition, this);
/**
* Передаем в макет контрола данные о его опциях.
* @see http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/ILayout.xml#constructor-summary
*/
this.layout = new this.constructor.Layout({ options: this.options });
/**
* Контрол будет добавляться в pane событий, чтобы исключить интерактивность.
* @see http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/ILayout.xml#setParentElement
*/
this.layout.setParentElement(map.panes.get('events').getElement());
}
else {
this.layout.setParentElement(null);
}
return this;
},
/**
* Возвращает ссылку на родительский объект.
* @see http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/IControl.xml#getParent
* @function
* @name CrossControl.getParent
* @returns {IControlParent} Ссылка на родительский объект.
*/
getParent: function () {
return this.parent;
},
/**
* Устанавливает контролу опцию "position".
* @function
* @private
* @name CrossControl._setPosition
* @param {Array} size Размер контейнера карты.
*/
_setPosition: function (size) {
// -8, так как картинка 16х16
this.options.set('position', {
top: size[1] / 2 - 8,
right: size[0] / 2 - 8
});
}
};