在 Google Maps API v3 中停止空闲事件

use*_*289 5 javascript google-maps google-maps-api-3

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

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

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

小智 0

我的谷歌地图也有类似的问题,这是我的解决方法......

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

viewportN = 85;
viewportS = 88;
searchBoundN = 83;
searchBoundS = 90;
Run Code Online (Sandbox Code Playgroud)

当您单击标记时,它会自动平移您,以便您的 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();
      }
});
Run Code Online (Sandbox Code Playgroud)

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