У меня есть страница с фильтрами сверху и переключателем между представлением плитки или представлением карты.
Каждый раз, когда меняется фильтр, я выполняю поиск с помощью AJAX и меняю представление с помощью Mustache. На мобильных устройствах по умолчанию используется мозаичный вид со значком в правом нижнем углу для переключения карты. Когда мой вид находится в режиме плитки, я меняю фильтр (чтобы отображались триггеры поиска и отфильтрованные плитки), затем я переключаюсь на вид карты, и он максимально уменьшается, и только нижний левый угол не становится серым. Выглядит это так:

Когда я загружаю страницу и сразу же переключаюсь на вид карты, это также первоначальный вид, который я вижу. Но если я затем изменю фильтры и снова выполню поиск, карта загрузится правильно и будет работать отлично. Но после переключения на плитки, смены фильтров и возврата в режим карты снова ломается.
Это HTML-держатель карты:
jQuery:
$(document).ready(function(){ 'используйте строгий'; curr_lang = $('#curr_lang').val(); инициализироватьЭлементы(); //Читаем параметры запроса и настраиваем все в соответствии с ними setupConfig (radiusSlider); //Настраиваем прослушиватели для поля поиска произвольного ввода текста setupFreetextField(); НастройкаПолеИнтереста(); setupLocationField(); setupDaterangeField(); setupMorefiltersField(); }); функция инициализироватьЭлементы () { $(окно).scroll(функция() { вар волонтер = $('#map_canvas'); вар смещение = волонтер.смещение(); верх = смещение.топ; состояние = $('.footer').offset().top; var дно = $('#map_canvas').offset().top; if ($(window).scrollTop() + Volunter.height() + 134 > состояние) { волонтер.removeClass('исправлено'); волонтер.addClass('дно'); } else if ($(this).scrollTop() + 58 > дно) { волонтер.addClass('исправлено'); волонтер.removeClass('дно'); } еще { волонтер.removeClass('исправлено'); волонтер.removeClass('дно'); } //Включаем значок переключения меню поиска if ($(window).width() filter.height()) { searchToggle.addClass('показать'); } еще { searchToggle.removeClass('показать'); фильтры.removeClass('мобильные-фильтры'); } } }); if ($(window).width() 1227) { vacancyGrid.removeClass('hide-mobile'); mapGrid.removeClass('show-mobile'); $('#mapview').removeClass('hide-mobile'); $('#gridview').removeClass('show-mobile'); $(document.body).removeClass('карта'); }иначе если($(окно).ширина() 0) { for (индекс = 0; индекс 13) { a.layer.spiderify(); } }); маркер.bindPopup(информация); mcg.addLayer(маркер); } //console.log(boundsarray); map.fitBounds(boundarray); Map.addLayer(MCG); }
РЕДАКТИРОВАТЬ: я добавил полный код после попытки добавить map.invalidateSize(); в функцию переключения карты. Но результат тот же. Функция setupMap() вызывается в конце моего метода успеха AJAX для поиска. (Параметр вакансий является результатом моего метода AJAX и содержит информацию о плитках, а также широту/долготу вакансии)
Мобильная версия