Google マップのマーカーをクリアしたい。
marker.setVisible(false)
とはどう違いmarker.setMap(null)
ますか?
わからないけど、どっちが正しいの?
Google マップのマーカーをクリアしたい。
marker.setVisible(false)
とはどう違いmarker.setMap(null)
ますか?
わからないけど、どっちが正しいの?
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)
ます。
もう 1 つの重要な違いはsetMap(NULL)
、マーカーに関連付けられたリソースを解放するのに対し、マーカーを非setVisible(false)
表示にするだけで、マーカーに関連付けられたリソースは引き続き割り当てられることです。
数百または数千のマーカーを扱っている場合、これはパフォーマンスとメモリの重大な問題になる可能性があります。