Клуб API Карт

Какое событие надо обрабатывать при листании карусели в кластере?

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

нужно получить доступ как к балуну при этом (необходимо ему высоту изменить).

7 комментариев

нашел вот такое, вроде почти то что нужно

clusterer.events.add('balloonopen', function (e) {

                var cluster = e.get('target'),

                    activeObject = cluster.state.get('activeObject');

                cluster.state.events.add('change', function () {

//do smth

                });

 

            });

 

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

Нет, динамически изменять высоту стандартного балуна нельзя. У нас есть пример, как создать собственный макет, подстраивающийся под высоту.

да, я смотрел этот пример, но не очень понятно как его интегрировать с шаблоном карусели, или придется совсем свою карусель делать с нуля?

Сейчас поэкспериментировала с опциями. Вы можете изменять размеры балуна через опции.

Нужно задавать набор опций 

cluster.options.set({

    balloonHeight: 200,

    balloonMaxHeight: 300,

    balloonMinHeight: 300

});

(если задавать опции через кластеризатор, то нужно еще дописать префикс "cluster" к названиям опций).

 

Тогда балун нормально меняет высоту. Только надо учитывать, что нужно обязательно, чтобы значения maxHeight и minHeight были больше, чем height, иначе там тоже появится прокрутка.

ага, спасибо, попробую этот вариант.

попробовал вот так 

clusterer.events.add('balloonopen', _.bind(function (e) {

                    cluster.state.events.add('change', _.bind(function () {

                   

                    var view = new OnePopupView({

                        el: $(".bMap__eBaloon"),

                        cluster : cluster

                    });

 

var height = view.$el.height();

 

                options.cluster.options.set({

                    balloonHeight: height,

                    balloonMaxHeight: height,

                    balloonMinHeight: 200

 

                });

 

                }, this));

            }, this));

 

оно работало н оне четко

1) открытие нового элемента в карусели стало значительно( раза в 4-5) дольше

2) при листании карусели иногда выкидывалась ошибка типа this._Yh undefined (точно не помню переменную) после чего карусель отрубалась и не реагировала на события.

 

возможно я что-то не так сделал?

1. balloonopen на кластеризаторе может относиться как к кластеру, так и к отдельной метке - нужно делать дополнительную проверку.

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

 

И еще я не очень поняла из примера, как именно у вас подцепляется содержимое балуна к балуну. Можете дать ссылку на пример?