我想在Google地图上清除标记。
marker.setVisible(false)
和marker.setMap(null)
之间的区别是什么?
但我不知道,哪个是对的?
答案 0 :(得分:24)
两种方法之间的差异似乎没有明确记录。但请注意以下事项:
当您使用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)
。
答案 1 :(得分:12)
另一个关键区别是setMap(NULL)
释放与标记关联的资源,而setVisible(false)
只是使标记不可见,但仍然会分配与标记关联的资源。
如果你正在处理100或1000的标记,这可能会成为一个重要的性能和内存问题。