Клуб API Карт

Автозум карты

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

Делаю так:

 

var barMap = new ymaps.Map('y-map', {

    center: [55.72504493, 37.64696100],

    zoom: 10,

    behaviors: ['default', 'scrollZoom']

}), coords = [], barList = [someJsonData];

var collection = new ymaps.GeoObjectCollection();

 

for (var i in barList) {

    coords = barList[i].coords.split(',');

    collection.add(new ymaps.Placemark([coords[0], coords[1]], {

        balloonContentHeader: '<a href="/bars/' + barList[i].link + '" target="_blank" title="Откроется в новом окне">' + barList[i].name + '</a>',

        balloonContent: barList[i].address

    }));

}

 

barMap.geoObjects.add(collection);

barMap.setBounds(collection.getBounds());

 

В итоге вижу это: http://joxi.ru/L21jx64TVOKYAX

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

ссылка?

Что ссылка?

нужна ссылка на страницу, а не код

Мы код в голове выполнять не умеем и ваших исходных данных у нас нет.

http://dev1.gdebar.ru/map.html

 

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

Кстати почему карта нормально отрисовывается только спустя небольшую задержку или при повторном переключении вкладки?

http://dev1.gdebar.ru/map.html

Метод setBounds рассчитывает область видимости исходя из размера контейнера карты

внутри скрытого контейнера размер карты = 0, поэтому выполнять setBounds надо после того как карта будет видна (обычно используют обработчик события показа вкладки)

Да, спасибо.

Но всё же я вызываю setBounds после того как див стал видимым.

Без небольшого setTimeout (как в примере по ссылке выше) карта не хочет корректно отображаться...

 

Но всё же я вызываю setBounds после того как див стал видимым.

Нет это не так.

Параметр complete в методе show не для красоты сделан

http://api.jquery.com/show/

Всё равно не работает, даже если в complete засовываю setBounds.

Нормально работает только если анимацию минимум 200 мс ставить либо повторно переключить вкладку.

у меня работает в Хроме и Сафари.

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

https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/map.Container-docpage/#fitToViewport

Переместил навешивание обработчика вкладок внутрь функции инициализации карты.

Всё заработало без тайминга и без помещения setBounds в метод complete функции show.

Интересно, почему так...

 

Спасибо за ответы =)