【发布时间】:2012-05-28 01:19:55
【问题描述】:
我正在编写一个 google maps v3 javascript 应用程序,当地图的边界发生变化时,它会获取新的标记。为此,我正在使用“bounds_changed”侦听器。 问题是我想限制我所做的调用,并且不想在每次用户更改地图视口时触发它们。仅当地图已更改并且已空闲 1 秒时,我如何才能触发此调用?
谢谢! 保罗
【问题讨论】:
标签: javascript google-maps google-maps-api-3
我正在编写一个 google maps v3 javascript 应用程序,当地图的边界发生变化时,它会获取新的标记。为此,我正在使用“bounds_changed”侦听器。 问题是我想限制我所做的调用,并且不想在每次用户更改地图视口时触发它们。仅当地图已更改并且已空闲 1 秒时,我如何才能触发此调用?
谢谢! 保罗
【问题讨论】:
标签: javascript google-maps google-maps-api-3
为超时声明一个全局变量
var changetm = null;
如果你打电话
function event_handle(e){
clearTimeout(changetm);
changetm = setTimeout("fetch_new_markers()", 1000);
}
这样做是清除上一个调用(如果存在),然后将下一个调用添加到队列中,等待 1000 毫秒(1 秒)并调用它。如果在 1 秒内触发了某个事件,它将再次清除等待队列...
呲牙
【讨论】:
获取您想要的最简单的方法可能是使用setTimeout() and clearTimeout() 来防止触发您的“更新”调用,直到地图空闲了所需的时间长度。
您可以实现您的 bounds_changed 监听器,以便它执行以下操作:
function loadMarkersForCurrentMapBounds() {
//code to load markers from your server goes here
}
function boundsChanged() {
//...
if (window.scheduledUpdate) {
clearTimeout(window.scheduledUpdate);
}
window.scheduledUpdate = setTimeout(loadMarkersForCurrentMapBounds, 1000);
//...
}
【讨论】:
window 对象,那么几乎可以保证谷歌地图也不会工作。实际上,您示例中的“全局”变量也将绑定到 window 对象,唯一真正的区别是我的示例中的代码使其显式化,以便清楚全局变量实际绑定到的上下文。