【问题标题】:stop idle event in Google Maps API v3Google Maps API v3 中的停止空闲事件
【发布时间】:2014-07-26 17:15:03
【问题描述】:

我正在使用带有标记设置的 Google 地图在地图上显示位置。我正在使用idle 事件来确定何时提交对新数据的请求,这样当用户平移或缩放地图时,将调用 ajax 服务并更新标记以在新视口中查找位置.

问题在于,当用户单击标记以弹出信息窗口时,地图通常会略微移动以使信息窗口居中 - 这会触发另一个 idle 事件并重置地图,从而关闭信息窗口。

对此有最佳实践吗?有没有办法在打开信息窗口时禁用idle 侦听器,或者是否有标准的解决方法?

【问题讨论】:

  • 尝试使用 infowindow 选项disableAutoPan: true在打开时禁用自动平移。默认情况下,信息窗口将平移地图,以便在打开时完全可见。
  • @AntoJurković-- 谢谢-- 这是个好主意,但是用户很可能会自己平移它以查看整个信息窗口,因此问题再次出现。如果信息窗口打开,我想我需要一些方法来禁用idle 事件,或者类似的解决方法。

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


【解决方案1】:

我的 googleMaps 遇到了类似的问题,这是我的解决方法....

在调用标记期间,我下载了视口之外的点。例如.... 如果我的 N 界限纬度是 85,我的 S 界限是 88,我会在纬度 83 到 90 之间拉点。

viewportN = 85;
viewportS = 88;
searchBoundN = 83;
searchBoundS = 90;

当您单击标记时,它会自动平移您,这样您的 Northbound 现在是 84。您在空闲函数中放置了一条 if 语句,内容如下:

 map.addListener("idle", function () {
      //get map viewport bounds
       .....
      // check if you're in territory that doesn't have markers
      if (viewPortN < searchBoundN || viewportS > searchBoundS || <<repeat for E, W>>) {
           refreshMarkers();
      }
});

应该解决你的问题。它告诉您的脚本仅在大移动后刷新标记。 为了安全起见,我的地图从视口的两倍区域拉出标记。它还可以防止您的数据从较小的平底锅中刷新,这将减少对您服务器的请求数量。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,因为我在前端开发方面没有太多经验,所以我尝试启用实际搜索和填充标记,前提是事件仅来自“拖动”或“缩放更改”等用户交互事件。

    起初我寻找一种方法来找出空闲事件中是否有任何内置属性或标志,但没有。然后我自己做了一个。

    因为这些事件在“空闲”事件之前被触发,所以我在这些事件中设置了一个标志(我知道这不是最佳实践)并且在“空闲”事件中我检查了“isUserInteraction”标志是否为真填充标记的过程将工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 2012-08-15
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      相关资源
      最近更新 更多