【问题标题】:How to know if the user change zoom (Google Maps V3)如何知道用户是否更改缩放(Google Maps V3)
【发布时间】:2016-11-21 09:01:08
【问题描述】:

我正在使用 Google 地图和 Angularjs 开发一个应用程序。我有这个代码来控制缩放是否改变

google.maps.event.addListener(map, 'zoom_changed', function(){

  });

问题是,我只需要在用户更改缩放时执行此事件。我的代码中有一个 fitBounds() 也可以更改缩放。

var latlngbounds = new google.maps.LatLngBounds();
  for (var i = 0; i < latlng.length; i++) {
    latlngbounds.extend(latlng[i]);
  }

  map.fitBounds(latlngbounds);

是否有区分用户操作的选项?

【问题讨论】:

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


    【解决方案1】:

    目前公认的解决方案在一般情况下可能无法正确解决此问题。转到 interactive demo 以获取 Google Maps API 文档中的地图 UI 事件。请注意,如果您将光标放在地图上并使用鼠标滚轮滚动,则不会触发任何 mousedrag 事件,因为鼠标保持静止。

    当前的解决方案假定在mouseover 事件之后不会发生任何程序化地图更新,这对于原始发布者的应用程序可能是正确的,但在更一般的应用程序中可能不是正确的。

    我提出下面的替代解决方案。

    首先,无论您在代码中以编程方式更新地图的任何位置,都应在地图上设置一个自定义属性(我们将其称为systemZoomChange),这表明更改是以编程方式启动的。

    var latlngbounds = new google.maps.LatLngBounds();
    for (var i = 0; i < latlng.length; i++) {
      latlngbounds.extend(latlng[i]);
    }
    
    map.systemZoomChange = true
    map.fitBounds(latlngbounds);
    

    然后在任何事件侦听器上,添加对自定义 systemZoomChange 属性的检查,并在标记时将其重置,以避免对系统事件进行操作。

    map.addListener('zoom_changed', function () {
      if (map.systemZoomChange) {
        map.systemZoomChange = false  // Reset the flag for a system-initiated event
      } else {
        // Handle the user-initiated event
      }
    });
    

    【讨论】:

    • 很好的解决方案,除了你应该设置map.systemZoomChange = true 之前调用fitBounds()setZoom()
    • @MrUpsidown - 啊,愚蠢的错误。我编辑了我的答案。谢谢!
    【解决方案2】:

    好的,我找到了方法

    google.maps.event.addListenerOnce(map, 'mousemove', function(){
    
        google.maps.event.addListener(map, 'zoom_changed', function(){
    
        });
    
      });
    

    首先,它检测鼠标是否移动,然后检测缩放是否改变并正常工作!

    【讨论】:

    • 这不应该是公认的解决方案,它不是您问题的正确解决方案。此外,它还有意想不到的副作用。
    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多