关于javascript:在Google Maps API v3中停止空闲事件

stop idle event in Google Maps API v3

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

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

这是最好的做法吗? 有没有办法在打开infowindow时禁用idle监听器,或者是否有标准的解决方法?


我遇到了同样的问题,因为我没有太多的前端开发经验,我试图启用实际搜索和填充标记,如果只有事件来自用户交互,如'drag'或'zoom-changed'事件。

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

因为这些事件在'idle'事件之前触发了我在这些事件中设置了一个标志(我知道这不是最佳实践)并且在'idle'事件中我检查'isUserInteraction'标志是否为true,填充标记的过程将起作用。


我与googleMaps有类似的问题,这是我的解决方法....

在我打电话给Markers的过程中,我在视口之外下载了点数。例如....
如果我的N绑定纬度为85且我的S界限为88,我会在83到90纬度之间拉点。

1
2
3
4
viewportN = 85;
viewportS = 88;
searchBoundN = 83;
searchBoundS = 90;

当你点击标记时,它会自动平移你,你的Northbound现在是84.你在空闲函数中放了一个if语句:

1
2
3
4
5
6
7
8
 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();
      }
});

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