В чем разница между "marker.setVisible(false)" и "marker.setMap(null)" в Google Maps v3?

Я хочу очистить маркер на Картах Google.

В чем разница между marker.setVisible(false) и marker.setMap(null)?

Но я не знаю, что правильно?

Ответы

Ответ 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), когда мы больше не будем показывать его.

Ответ 2

Другое ключевое различие заключается в том, что setMap(NULL) освобождает ресурсы, связанные с маркером, тогда как setVisible(false) просто делает маркер невидимым, но ресурсы, связанные с маркером, все еще выделены.

Если вы имеете дело с 100 или тысячами маркеров, это может стать существенной проблемой производительности и памяти.