Клуб API Карт

События готовности карты

svar2
28 февраля 2014, 11:53

Создаю карту по запросу на странице (а не в момент создания страницы)

Переменные cx,cy,z приходят для установки начальных координат.

function FinishCreateYandMap(ymaps,cx,cy,z)
               {
     map = new ymaps.Map("smartmap",
                                     {center: [cx,cy],
                                     zoom: z,
                                     type: "yandex#publicMap" }
                                    ) ;

}

Почти сразу вызывается код:

               window.map.setBounds([[xMin,yMin], [xMax,yMax]], { checkZoomRange: false } ) ;

Так вот, если вызвать FinishCreateYandMap(ymaps,cx,cy,z), а затем сразу же setBounds

карта начинает показывать весь мир и игнорирует координаты setBounds !

Если выждать секунду или более то setBounds отрабатывается без проблем.

Итак вопрос: на какое событие я должен подвесится чтобы дождатся внутренней кухни коструктора new ymaps.Map и успешно выполнить setBounds.

И где список возможных событий карты. В гуглмапс то есть tilesloaded, idle. А здесь какие ?

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

Сказать setBounds надо когда контейнер карты отобразится в DOM-дереве.

Обычно если карту показывают в каком-нибудь табе типа jQuery.UI, то в нем есть спец-событие отображения вкладки

а весь мир показывает потому что его размеры равны нулю на момент вызов setBounds

 

Спасибо за ответ.

То есть от самой карты нет никаких событий ? Может есть стандартный код решения (мож в док-ции)? А то ведь выходит после

map = new ymaps.Map("smartmap",
                                     {center: [cx,cy],
                                     zoom: z,
                                     type: "yandex#publicMap" }
                                    ) ;

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

Неужели на div элемент с id="smartmap" я должен навесить событие OnShow ? И вот как это правильно сделать ?

С картой можно работать сразу после создания, дело не в этом, как я уже писал у вас размер контейнера равен 0

Вы через что показываете карту?

Решение зависит от выбранного фреймворка что тут можно добавить в документацию?

У нас есть пример с jQuery.UI


У карты есть событие "sizechange", можно попробовать использовать его, должно сработать
myMap.events.add('sizechange', function () {
    myMap.setBounds(...);
});

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

Итого сейчас:

1) onload=InitMap

2) в InitMap ymaps.ready

3) в ymaps.ready создание карты с навеской sizechange

4) в sizechange mapConstructed=true; и наконец можно работать