Разница между этими двумя методами не представляется четко документированной. Однако обратите внимание на следующее:
Когда вы используете 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)
, когда мы больше не будем его показывать.