В чем разница между "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 или тысячами маркеров, это может стать существенной проблемой производительности и памяти.