18

我想清除 Google 地图上的标记。

marker.setVisible(false)和 和有什么不一样marker.setMap(null)

但我不知道,哪个是正确的?

4

2 回答 2

25

这两种方法之间的区别似乎没有明确记录。但是,请注意以下几点:

  • 当您使用 时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)当我们不再显示它时。

于 2010-09-05T22:23:39.083 回答
12

另一个关键区别是setMap(NULL)释放与标记关联的资源,而setVisible(false)只是使标记不可见,但与标记关联的资源仍被分配。

如果您要处理 100 或 1000 个标记,这可能会成为一个重要的性能和内存问题。

于 2011-05-23T04:57:03.747 回答