18

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

marker.setVisible(false)とはどう違いmarker.setMap(null)ますか?

わからないけど、どっちが正しいの?

4

2 に答える 2

25

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

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

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

例:

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)ます。

于 2010-09-05T22:23:39.083 に答える
12

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

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

于 2011-05-23T04:57:03.747 に答える