2017-07-27 13 views
1

OpenLayersを使用してマップを表示し、そのインターフェイスのAdminLteを使用しています。OpenLayers:サイドバーが折りたたまれた後にマップを再描画するにはどうすればよいですか?

問題:特定のページでメインの左側のサイドバーを折りたたむと、すべてのボックスとその内容がサイズが変わります(実際はわかりません)ので、マップも大きくなります。問題が発生すると、マップに表示されているすべての機能が位置を変えてしまい、もはやどこにあるのかわかりません。

私が希望するもの:サイドバーが折りたたまれた後でマップを再描画するには

提案がありますか?

私が試した:

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

と:

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

が、無駄にし...

EDIT:私の質問はこの1つのようになります。OpenLayers: How to re-align mouse coordinates and vector layers after fluid css rendering of map divが、彼のソリューションを私のために働いていません:)

EDIT 2:明確にする:私の問題の解決策は、サイドバーの折り畳みが終了したときにmap.updateSize()メソッドを呼び出すことだと思います。問題は、サイドバーの折り畳み/拡大が完了した瞬間をどのように捕まえるのか分からないことです。

答えて

0

私が見つけた一時的な解決策は、ボタンがサイドバーの崩壊を誘発する際のタイムアウトを開始し、map.updateSize()メソッドを呼び出すことでした。/

0

次にあなたのイベントハンドラを変更し、後にサイドバーの崩壊をマップを再描画しようとしている場合:

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

イベントハンドラhereのリストによると、hidden.bs.collapseイベントが発生しました折り畳み要素はユーザーから隠されています。それは動作します...しかし、それは一種のMEHだ

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

+0

申し訳ありません、私はOpenLayersにかなり新しいです:) しかし、あなたの可変マップは何ですか? ol.Mapオブジェクト? –

+0

変数は、マップをインスタンス化するために使用したもの(同じファイル内や他の場所にあるもの)でも構いません。あなたのコードのどこかに、 'var map = new OpenLayers.Map( 'map');'と似たようなコードが必要です。 –

+0

私はそうです! :) しかし、私はmap.getSource()をしようとしたときに変更();私は持っていた: 未知の型エラー:map.getSourceは関数ではありません。 私はAPIを見て、明らかにol.Mapオブジェクトには.getSource()メソッドがありません。 –

関連する問題