Клуб API Карт

setBounds/getBounds

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

Доброго времени суток!
Инициализирую карту в скрытом контейнере. Далее при отображении контейнера вызываю следующую функцию:

function setView() { 

     mainMap.setBounds(mainMap.geoObjects.getBounds()); 

}
 

Так вот при первом вызове функции setView() (соответственно при первом отображении контернера с картой), функция отрабатывает не корректно, но при последующих вызовах все в порядке. К сожалению не смог добавить скрины, через интерфейс форума, поэтому прикладываю ссылку на них: http://dropmefiles.com/QN9rx. Подскажите, пожалуйста, это проблема АПИ или на моей стороне?

5 комментариев
Всеволод Шмыров
27 января 2016, 23:50
Доброе утро! В какой момент происходит вызов setView? Сразу после изменения CSS-свойства display у контейнера или его родителя?

Да, сразу после изменения css. Речь идет о jQueryUI-Tabs. При переходе на вкладку - срабатывает событие activate вот в нем и происходит вызов setView().

Впрочем я пробовал вызывать setView() и до отображения, и несколько раз подряд, и всяко-разно. И единственное после чего он начинает корректно устанавливать масштаб и положение (впрочем скорее всего именно с масштабом проблемы, а положение, как следствие) - это первый раз отобразить карту. В том числе работает и с задержкой, если вызвать так:
 function setView() { 
     setTimeout(function(){
          mainMap.setBounds(mainMap.geoObjects.getBounds()); 
     }, 500);

}
То есть после того, как карта успевает отрисовать пару тайлов...

Всеволод Шмыров
27 января 2016, 23:50
Видимо дело в том, что контейнер не успевает применить размеры. Вызовите перед mainMap.setBounds(mainMap.geoObjects.getBounds());
метод
map.container.fitToViewport();

спасибо! помогло!