OpenLayers: Как я могу перерисовать карту после сворачивания боковой панели?

1

Я использую OpenLayers для отображения карты и AdminLte для интерфейса.

Моя проблема: при сворачивании основной левой боковой панели на заданной странице все поля и то, что они содержат, меняют размер (я действительно не знаю, как это сделать), поэтому карты становятся больше. Проблема в том, что когда это происходит, все функции, отображаемые на картах, по-видимому, меняют положение и не там, где они должны быть больше.

Что бы я хотел: Чтобы перерисовать карту после сбоя боковой панели.

Любое предложение?

Я старался:

$('.navbar-collapse').on('shown.bs.collapse', function() {
    map.updateSize();
});

а также:

$('.sidebar').on('shown.bs.collapse', function() {
   map.updateSize();
});

но безрезультатно...

EDIT: Мой вопрос похож на этот: OpenLayers: как переориентировать координаты мыши и векторные слои после рендеринга css-рендеринга map div, но его решение не работает для меня :)

РЕДАКТИРОВАНИЕ 2: просто для того, чтобы уточнить: я думаю, что решение моей проблемы - вызвать метод map.updateSize(), когда боковая панель закончит свертывание. Проблема в том, что я не знаю, как поймать момент, когда боковая панель закончила рушиться/расширяться!

Теги:
gis
openlayers
adminlte

2 ответа

0
Лучший ответ

Временное решение, которое я нашел, это запустить тайм-аут, когда кнопка, запускающая боковую панель, сбрасывается, а затем вызывает метод map.updateSize():

  $('.sidebar-toggle').click(function(){
      setTimeout(function(){ map.updateSize(); }, 500);             
  });

Это работает... но это своего рода meh:/

0

Если вы пытаетесь перерисовать карту после сбоя боковой панели, измените обработчик событий на следующее:

$('.sidebar').on('hidden.bs.collapse', function() {
   map.updateSize();
});

В соответствии со списком обработчиков событий здесь событие hidden.bs.collapse запускается, когда элемент hidden.bs.collapse скрыт от пользователя.

  • 0
    Извините, я довольно новичок в OpenLayers :) Но какой будет ваша карта переменных? Объект ol.Map?
  • 0
    Ваша переменная будет тем, что вы использовали для создания экземпляра вашей карты (будь то в том же файле или в другом месте). Где-то в вашем коде вы должны иметь немного кода, похожего на var map = new OpenLayers.Map('map'); ?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню