【问题标题】:What is the difference between "marker.setVisible(false)" and "marker.setMap(null)" in Google Maps v3?Google Maps v3 中的“marker.setVisible(false)”和“marker.setMap(null)”有什么区别?
【发布时间】:2011-04-08 13:02:14
【问题描述】:

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

marker.setVisible(false)marker.setMap(null) 有什么区别?

但我不知道,哪个是对的?

【问题讨论】:

    标签: javascript google-maps google-maps-api-3 google-maps-markers


    【解决方案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 或 1000 个标记,这可能会成为严重的性能和内存问题。

      【讨论】:

      • 总之,setMap(null) 会为 1000 个标记产生更好的性能
      猜你喜欢
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      相关资源
      最近更新 更多