web-dev-qa-db-ja.com

Google Maps v3の「marker.setVisible(false)」と「marker.setMap(null)」の違いは何ですか?

Googleマップのマーカーをクリアしたい。

marker.setVisible(false)marker.setMap(null)の違いは何ですか?

でもわかりません、どちらが正しいですか?

18
zjm1126

2つの方法の違いは、明確に文書化されていないようです。ただし、次の点に注意してください。

  • setMap(null)を使用すると、マーカーはMapへの参照を失います。 Mapオブジェクトへの参照を保持しないと、マーカーを再表示できません。

  • さらに、setMap()メソッドは_visible_changed_イベントをトリガーしませんが、setVisible()メソッドはトリガーします(可視性が実際に切り替えられている場合)。

例:

_var map = new google.maps.Map(document.getElementById('map'), {
  zoom: 4,
  center: new google.maps.LatLng(-25.363, 131.044),
  mapTypeId: google.maps.MapTypeId.ROADMAP
});

var marker = new google.maps.Marker({
  position: new google.maps.LatLng(-25.363, 131.044), 
  map: map
}); 

google.maps.event.addListener(marker, 'visible_changed', function() {
  console.log('visible_changed triggered');
});

marker.setVisible(false); // visible_changed triggered
marker.setVisible(true);  // visible_changed triggered
marker.setMap(null);      // visible_changed not triggered
marker.setMap(map);       // visible_changed not triggered
_

マップ上にマーカーを再度表示する場合はsetVisible(false)メソッドを使用し、再度表示しない場合はsetMap(null)メソッドを使用する必要があると思います。

24
Daniel Vassallo

もう1つの重要な違いは、setMap(NULL)はマーカーに関連付けられたリソースを解放するのに対し、setVisible(false)はマーカーを非表示にするだけですが、マーカーに関連付けられたリソースは引き続き割り当てられます。

数百または数千のマーカーを処理している場合、これはパフォーマンスとメモリの重大な問題になる可能性があります。

12
Phil Glau