【问题标题】:Fire event only when google map has been idle for number of seconds仅当谷歌地图空闲几秒钟时触发事件
【发布时间】:2012-05-28 01:19:55
【问题描述】:

我正在编写一个 google maps v3 javascript 应用程序,当地图的边界发生变化时,它会获取新的标记。为此,我正在使用“bounds_changed”侦听器。 问题是我想限制我所做的调用,并且不想在每次用户更改地图视口时触发它们。仅当地图已更改并且已空闲 1 秒时,我如何才能触发此调用?

谢谢! 保罗

【问题讨论】:

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


    【解决方案1】:

    为超时声明一个全局变量

    var changetm = null;
    

    如果你打电话

    function event_handle(e){
    
        clearTimeout(changetm);
        changetm = setTimeout("fetch_new_markers()", 1000);
    
    }
    

    这样做是清除上一个调用(如果存在),然后将下一个调用添加到队列中,等待 1000 毫秒(1 秒)并调用它。如果在 1 秒内触发了某个事件,它将再次清除等待队列...

    呲牙

    【讨论】:

    • 太棒了。正是我需要的。谢谢!
    【解决方案2】:

    获取您想要的最简单的方法可能是使用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 对象,唯一真正的区别是我的示例中的代码使其显式化,以便清楚全局变量实际绑定到的上下文。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2015-02-06
    • 1970-01-01
    相关资源
    最近更新 更多