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