В чем разница между "marker.setVisible (false)" и "marker.setMap (null)" в Google Maps v3? - PullRequest
18 голосов
/ 06 сентября 2010

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

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

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

Ответы [ 2 ]

24 голосов
/ 06 сентября 2010

Разница между этими двумя методами не представляется четко документированной. Однако обратите внимание на следующее:

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

12 голосов
/ 23 мая 2011

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

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

...