Antwort

22

Der Unterschied zwischen den beiden Methoden scheint nicht eindeutig dokumentiert zu sein. Allerdings ist folgendes zu beachten:

  • Wenn Sie setMap(null), Ihre Markierung wird der Verweis auf die Map verlieren. Wenn Sie keinen Verweis auf das Objekt Map behalten, können Sie den Marker nicht erneut anzeigen.

  • Darüber hinaus ist die Methode nicht setMap() triggern die visible_changed Ereignis, während die setVisible() Methode tut (wenn die Sichtbarkeit tatsächlich umgeschaltet wird).

Beispiel:

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 

Ich denke, wir sollten die setVisible(false) Methode verwenden, wenn wir die Markierung wieder aufführen wieder auf der Karte beabsichtigen, und die setMap(null), wenn wir es nicht wieder zeigen.

10

Ein weiterer wichtiger Unterschied besteht darin, dass setMap(NULL) die mit dem Marker verbundenen Ressourcen freigibt, während setVisible(false) den Marker nur unsichtbar macht, aber die dem Marker zugeordneten Ressourcen noch zugewiesen werden.

Wenn Sie mit 100 oder 1000 Markern arbeiten, kann dies zu einem erheblichen Leistungs- und Speicherproblem werden.

+3

Zusammengefasst würde 'setMap (null)' eine bessere Leistung für 1000er Marker liefern – Federico

Verwandte Themen