Клуб API Карт

Смещение балуна

Пост в архиве.

Добрый день.

Возникла такая задача - необходимо сделать смещение балун по высоте. Но вся загвоздка в том, что используется собственный layout, и высота балуна не фиксированная. Как это можно побороть?

5 комментариев
Sergey Konstantinov
28 января 2016, 04:24
Поясните подробнее, лучше со ссылкой на страницу )

Ссылку, к сожалению, сейчас дать не смогу, пока всё на тестовом сервере.

Постараюсь объяснить (жаль что нет форматирования кода)

Создаю свой layout с помощью ymaps.templateLayoutFactory.createClass.

И теперь при показе балуна надо изменить offset в зависимости от высоты балуна, но значение высоты балуна не известно. 

Вроде, если переопределять build можно получить значение высоты, но как его установить так и не смог найти способа.

 

Вечером постараюсь выложить кусок кода, чтобы стало понятнее.

Если вы работаете с геообъектом, то это опция balloonOffset

Решили ли вы эту проблему? Т.к нужно реализовать точно такой же функционал. Не могу понять на какое событие подписаться, чтобы понять на какую метку было нажатие, и когда можно померить размер балуна

Да, проблему решил.

Примерно так:

clusterBalloonLayout = ymaps.templateLayoutFactory.createClass(

    'HTML-код балуна',

    {

         build: function (){

         /*Опущу не нужный код*/

         var balloonOffset = -parseInt(jQuery(this.getParentElement()).find('.b-simple-balloon-layout').outerHeight());

         var clusterBalloon = this.getData().properties.get('cluster')

         clusterBalloon.options.set({

                  balloonOffset:[-170,balloonOffset],

})

         }

/**и добавляем ссылку на кластер после создания кластера**/

clusterer.createCluster = function (center, geoObjects) {

         var cluster = ymaps.Clusterer.prototype.createCluster.call(this, center, geoObjects);

         cluster.properties.set('cluster', cluster);

         return cluster;

}