Клуб API Карт

Снова серая карта и map.redraw

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

Приветствую.

 

map.redraw - это просто вынос мозга, для непрограммистов вызывает проблемы со всеми скриптами. В моем случае ситуация следующая: есть скрипт на jquery, который работает со следующей структурой:

 

<div class="tab_section">
<ul class="tab_tabs">
<li class="tab_current">link1</li>
<li>link2</li>
</ul>
<div class="tab_box" style="display:block;">text1</div>
<div class="tab_box" style="display:none;">text2</div>
</div>

 

При клике по link2 у второго дива display меняется на block, у первого наоборот.

Сам скрипт во внешнем файле и выглядит примерно так:

 

(function($) {
$(function() {
    $('ul.tab_tabs').delegate('li:not(.tab_current)', 'click', function() {
        $(this).addClass('tab_current').siblings().removeClass('tab_current')
            .parents('div.tab_section').find('div.tab_box').hide().eq($(this).index()).fadeIn(500);
    })
})
})(jQuery)

 

Карты вызываются в обоих дивах (2 разные карты), соответственно, та карта, которая была в dispay:none, не рендерится.

Пользовался поиском, много экспериментировал - но я не являюсь программистом, видимо, поэтому результата не добился.

Прошу подсказать в какое место и в каком виде вставить map.redraw

1 комментарий
Sergey Konstantinov
28 января 2016, 05:37

> map.redraw - это просто вынос мозга, для непрограммистов вызывает проблемы со всеми скриптами

Проблему со скриптами вызывает не map.redraw, а невозможность кроссбраузерно отследить изменение размеров элемента на странице.

В Вашем случае у Вас должен быть массив карт, соответствующий массиву табов:

var maps = [

  new YMaps.Map($('#map1') ...

  new YMaps.Map($('#map2') ...

  ...

];

Тогда в обработчике клика нужно выполнить следующее

maps[$(this).prevAll().length].redraw();