есть балун с оформлением
setBalloonLayout: function () {
var balloonLayout = ymaps.templateLayoutFactory.createClass(
'<div class="m-balloon">' +
'<a class="close" href="#"></a><div class="m-balloon-inner">' +
'<div class="map-description__name">$[properties.name]</div>' +
'<div class="map-description__address">$[properties.address]</div>' +
'</div></div>',
/*Переопределяем build балуна, для расчета смещения*/
{
build: function () {
var balloon = this.getData().geoObject.balloon;
var projection = wifimap.map.options.get('projection');
var position = this.getData().geoObject.geometry.getCoordinates();
var position_global_px = wifimap.map.converter.pageToGlobal(projection.fromGlobalPixels(position, wifimap.map.getZoom()));
var position_local_px = wifimap.map.converter.globalToPage(projection.toGlobalPixels(position,wifimap.map.getZoom()));
wifimap.map.setGlobalPixelCenter([position_global_px[0] + position_local_px[0], position_global_px[1] + position_local_px[1] + 180]);
this.constructor.superclass.build.call(this);
/*Вешаем событие на кнопку закрытия*/
jQuery('.close').on('click', function (e) {
e.preventDefault();
balloon.close();
})
}
})
ymaps.layout.storage.add('wifi#balloon', balloonLayout);
},
при открытии меняем координаты центра карты что бы балун был на экране
var projection = wifimap.map.options.get('projection');
var position = this.getData().geoObject.geometry.getCoordinates();
var position_global_px = wifimap.map.converter.pageToGlobal(projection.fromGlobalPixels(position, wifimap.map.getZoom()));
var position_local_px = wifimap.map.converter.globalToPage(projection.toGlobalPixels(position,wifimap.map.getZoom()));
wifimap.map.setGlobalPixelCenter([position_global_px[0] + position_local_px[0], position_global_px[1] + position_local_px[1] + 180]);
иногогда всё работает, иногда на вызове wifimap.map.setGlobalPixelCenter([position_global_px[0] + position_local_px[0], position_global_px[1] + position_local_px[1] + 180]); карты возвращают ошибку TypeError: this._xq is undefined
соотношение успехов к неудачам примерно 50/50 от чего это зависит понять не могу.