2011-08-02 24 views
2

私は、マーカの束と各マーカに対応するデータのテーブルを持ったマップを持っています。ユーザーがテーブル内の項目をクリックすると、対応するマーカーのInfoWindowが開きます。地図がズームアウトされ、マーカーがすべて表示されているときはすべて正常に機能しますが、地図が拡大表示されていてテーブルの項目をクリックしてオフスクリーンマーカーのInfoWindowを開いた場合は、次のようになります。Google Maps:オートパン後のInfoWindow閉

  1. InfoWindowが既に
  2. マップがパンを停止し、そしてInfoWindowが消え開い表示され、正しい場所にマップをスクロール。

何が起こっているのか、これを解決する方法についてのご意見はありますか?

+0

jsfiddleで動作を複製できますか?自動パンとパンを無効にすると、手動で開いていますか? – lashleigh

答えて

4

さてさて、私は次のことが起こっていた、本質的...地図上Marker Clustererを使用していたという事実に関連した問題:表中の

  1. クリックしてアイテムを、InfoWindow
  2. 地図をパンします
  3. を開きます表示する場所に移動します InfoWindow
  4. パンが完了すると、Marker Clustererは(必要に応じて)再描画して、[InfoWindow]を強制的に閉じます。

私のソリューションは、テーブル内の項目がクリックされたときに、私は「アイドル」リスナーを経由して完了するためにパンを待って、手動でこの場所にパン、対応Marker's緯度経度を取得し、完了時(およびということでしたClustererは再描画を行っています)、次にInfoWindowを開きます。

// get map, marker positions 
var mapLatLng = GLOBAL_map.getCenter();  
var markerLatLng = GLOBAL_markers[index].getPosition(); 

// pan the map 
if(!markerLatLng.equals(mapLatLng)) { 
    // map will need to pan 
    GLOBAL_map.panTo(markerLatLng); 
    google.maps.event.addListenerOnce(GLOBAL_map, 'idle', function() { 
    // open InfoWindow 
    GLOBAL_infowindow.setContent(GLOBAL_markers_content[index]); 
    GLOBAL_infowindow.open(GLOBAL_map, GLOBAL_markers[index]); 
    }); 
} else { 
    // map won't be panning, which wouldn't trigger 'idle' listener 
    GLOBAL_infowindow.setContent(GLOBAL_markers_content[index]); 
    GLOBAL_infowindow.open(GLOBAL_map, GLOBAL_markers[index]); 
} 
関連する問題