Клуб API Карт

api 2.0 Высота кастомного балуна.

zaartix
26 сентября 2012, 11:56

При помощи templateLayoutFactory создал шаблон балуна, но возникла проблема, если тыкаем по маркеру, расположенному близко к верхней границе, то автоскроллинг открывшегося балуна работает некорректно, т.е. он "недоскролливает" чутка. Вот пример:

 

А должно быть так:

 

Очевидно, что механизм не знает какая высота балуна, более того высота динамическая, в зависимости от контента. Пордскажите плз как можно решить сию проблемку. 

12 комментариев
Подписаться на комментарии к посту

Определите у вашего макета балуна метод getClientBoundingRect.

Он должен возвращать его визуальные размеры в пикселях относительно точки привязки, т.е. двумерный массив [[minX, minY], [maxX, maxY]].

            balloonLayout = ymaps.templateLayoutFactory.createClass(
            balloonLayout_template,
            {
                build: function () {
                    this.constructor.superclass.build.call(this ) ;
                    var balloon = this.getData().geoObject.balloon;
                    $('.realty_yamap2_balloon_close').bind('click', function( )  {
                        balloon.close( ) ;
                    }) ;
                }
            });
Тут метод дописать?

да, рядом с build.

попробуем, спасибо.

getClientBoundingRect: function() {
                    var height = $('.realty_yamap2_balloon').height();
                    var width = $('.realty_yamap2_balloon').width();
                    return [[-width/2,-height],[width/2,height]];
}


Сделал так, вроде стало получше, но проблема теперь в том, что клик по метке снизу карты все-равно скроллит карту так, что балун оказывается вверху.

Т.е. при клике на красную пипку внизу:
https://scrobly.com/dC7gWnIlFQw4ZF07fBTB 

 

Происходит перемещение карты так:
https://scrobly.com/aR1okWZKBUvm7g8SSEhp 

 

А хотелось бы, чтоб карта не скроллилась, если есть место для открытия балуна.

апдейт:

как выяснилось, такой вариант оказался приемлимым.

Видимо вы неправильно расчитываете нижнюю границу.

пробовали экспериментировать со значениями границ?

может return [[-width/2, 0], [width/2, height]] ?

В этом случае, если пипка находится у верхней границы, то балун оказывается за пределами карты:

https://scrobly.com/CKTkYbbGC5QNdmvao4Ar

 

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

а живую ссылку можете дать? хотелось бы DOM посмотреть

и чему у вас в итоге равен height?

я конечно может не в тему но почему не попробовать

меткам указывать например balloonAutoPanMargin:[100,250],

или на форуме есть функция которая при клике смещает карту так что балун находиться внизу карты и посредине (могу найти)

 

Дада. http://clubs.ya.ru/mapsapi/replies.xml?item_no=30253
Читать до конца - там апдейт