2017-07-27 117 views
1

我正在使用OpenLayers來顯示地圖,而AdminLte則用於界面。OpenLayers:如何在側邊欄摺疊後重繪地圖?

我的問題:崩潰時給定頁面上的主要左側邊欄,所有的箱子,它包含的變化大小是什麼(我真的不知道怎麼做)這樣的地圖變得更大也。問題是,當它發生時,地圖上顯示的所有功能顯然都會改變位置,而不是它們應該在的位置。

我想要什麼:要在側欄摺疊後重繪地圖。

有什麼建議嗎?

我想:

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

和:

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

但無濟於事......

編輯:我的問題是類似這樣的:OpenLayers: How to re-align mouse coordinates and vector layers after fluid css rendering of map div但他的解決辦法不適用於我:)

編輯2:只是澄清:我認爲我的問題的解決方案是在邊欄完成摺疊時調用map.updateSize()方法。問題是,我不知道如何捕捉邊欄完成合攏/展開的時刻!

回答

0

一個臨時的解決方案,我發現是啓動按鈕時,觸發側邊欄崩潰超時,然後調用map.updateSize()方法:

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

它的工作...但它是一種MEH:/

0

如果你想側邊欄倒塌後重新繪製地圖,事件處理程序更改爲以下:

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

根據事件處理here的名單中,hidden.bs.collapse事件被觸發時,用戶隱藏了一個摺疊元素。

+0

對不起,我是OpenLayers的新手:) 但是你的變量映射會是什麼?一個ol.Map對象? –

+0

你的變量可能是你用來實例化你的地圖的任何東西(無論是在同一個文件或其他地方)。在你的代碼中,你必須有一些代碼類似於'var map = new OpenLayers.Map('map');'? –

+0

我願意! :) 但是當我試圖做map.getSource()。changed();我有: Uncaught TypeError:map.getSource不是一個函數。 所以我看了看API,顯然ol.Map對象沒有.getSource()方法。 –