Клуб API Карт

Скрытый див

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

Вставляю карту через скрытый DIV согласно примеру. На карту устанавливаю метку. Название выводится не полностью, тоже, в случае если из метки открываю балун. Проблему частично решает "placemark.update();", но сложность в том, что меток много. Каким образом организовать обновление всех меток? Пройтись циклом по массиву не получилось.

Код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Примеры. Инициализация карты скрытом диве.</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==" type="text/javascript"></script>
    <script type="text/javascript">
        // Создание обработчика для события window.onLoad
        YMaps.jQuery(function () {
            // Создание экземпляра карты и его привязка к созданному контейнеру
            var container = YMaps.jQuery("#YMapsID"),
                map = new YMaps.Map(container[0]);

            // Установка для карты ее центра и масштаба
            map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);
            var placemark = new YMaps.Placemark(new YMaps.GeoPoint(37.64, 55.76));
            var placemark2 = new YMaps.Placemark(new YMaps.GeoPoint(37.64, 55.78));

            // При щелчке на ссылке меняется видимость контейнера карты
            YMaps.jQuery("#change-map-visibility").bind('click', function () {
                container.css('display', (container.css('display') == 'none') ? '' : 'none');
                map.redraw(); // Перерисовка карты
                placemarks[1].update();
                return false;
            });

            var placemarks = new Array;
            placemarks[1] = new YMaps.Placemark(new YMaps.GeoPoint(37.60, 55.72));
            placemarks[1].setIconContent('<b>BS-------------1</b>');
            map.addOverlay(placemarks[1]);
            placemarks[2] = new YMaps.Placemark(new YMaps.GeoPoint(37.55, 55.64));
            placemarks[2].setIconContent('<b>BS-------------2</b>');
            map.addOverlay(placemarks[2]);


        });
    </script>
</head>

<body>
    <a id="change-map-visibility" href="#">показать/скрыть карту</a>
    <div id="YMapsID" style="width:600px;height:400px;display:none"></div>
</body>

</html>

 

5 комментариев
alexandrov-alexandr
28 января 2016, 07:33
Была аналогичная проблема.
Все решили при помощи позиционирования слоя за пределами видимости слева.
Либо можно при первом показе контейнера инициализировать карту и добавлять все объекты.

Также можно добавить все объекты в группу и при показе контейнера вызывать метод update() у группы.

Но самый простой вариант - это позиционирование карты за пределами видимости ;)
Михаил Ткачук (РЦР)
28 января 2016, 07:33
Группой интересное решение, попробую.
Михаил Ткачук (РЦР)
28 января 2016, 07:33
Не понял, можно пример или ссылку?
alexandrov-alexandr
28 января 2016, 07:33

Ну а потом уже корректируем позиционирование по клику, а не видимость.