Клуб API Карт

Отображение балуна на карте

Пост в архиве.
Отображение балуна на карте

В блоге «Ты вебмастер» опубликована статья о работе с балунами. В статье рассмотрены сразу три кейса: балун при клике на метку, балун без метки и балун, выходящий за пределы карты. 

UPD: Чтобы эти примеры работали быстрее, рекомендуем подключать не package.full, как это делает автор, а package.standard.

P.S.: Если вы написали интересную или полезную статью, присылайте нам ссылку или текст в клуб, facebook либо на почту ymapsapi@ya.ru.

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

пока все не так красиво, с выходом балуна) http://clubs.ya.ru/mapsapi/replies.xml?parent_id=30287&item_no=30284&with_parent=1#reply-mapsapi-30287

 

Да, помним :-)

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

Евгений, заработало?

Ой, ну как сказать, вроде да, но что-то не так как надо) да и немного непонятно мне, почему не запилили в апи вот эту проверку.

myMap.balloon.events
                // При открытии балуна начинаем слушать изменение центра карты
                .add('open', function (e) {
                    var balloon = e.get('balloon'),
                        isDisplaced = false;

                    eventsGroup = myMap.events.group().add('actiontick', function (e) {
                        var tick = e.get('tick'),
                            mapBounds = [
                                [tick.globalPixelCenter[0] - mapSize[0] / 2, tick.globalPixelCenter[1] - mapSize[1] / 2],
                                [tick.globalPixelCenter[0] + mapSize[0] / 2, tick.globalPixelCenter[1] + mapSize[1] / 2]
                            ],
                            balloonPosition = balloon.getPosition(),
                            zoomFactor = Math.pow(2, tick.zoom - myMap.getZoom()),
                            isVisible = isPointInBounds(mapBounds, zoomFactor == 1 ? balloonPosition : [
                                balloonPosition[0] * zoomFactor,
                                balloonPosition[1] * zoomFactor
                            ]);

                        // Проверяем, находится ли балун в видимой области
                        if (!isVisible && !isDisplaced) {
                            // Если геоточка уже вне видимой области, переносим балун в обычный контейнер.
                            balloon.options.set({
                                pane: 'overlays',
                                shadowPane: 'shadows'
                            });
                            isDisplaced = true;
                        } else if (isVisible && isDisplaced) {
                            // Иначе - возвращаем его в movableOuters.
                            balloon.options.set({
                                pane: 'movableOuters',
                                shadowPane: 'movableOuters'
                            });
                            isDisplaced = false;
                        }
                    });
                })
                // При закрытии балуна удаляем слушатели
                .add('close', function () {
                    eventsGroup.removeAll();
                });

 

http://clubs.ya.ru/mapsapi/replies.xml?parent_id=31520&item_no=31453&with_parent=1#reply-mapsapi-31520

видел, спасибо за ответ. А что насчет куска кода который нужно будет таскать с проекта в проект который обрабатывает все эти события (может вы его когда-то в апи запихнете?), и еще один момент который описывал   

 

Заметил баг - если балун за пределами карты и не виден,

берем карту и передвигаем ее (отпуская кнопку мыши, чтобы двигалась кинетикой) чтобы он стал виден 

 Балун становится видим до того как попадет на карту

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