检查Google Map Canvas元素是否已空闲

时间:2013-02-04 09:18:15

标签: javascript google-maps-api-3

我的问题很简单。

google.maps.event.addListenerOnce(map, 'idle', function() {
    // code
});

在地图当前缩放或平移后,会触发此代码段。不是在它已经空闲的时候。

有没有办法在if语句中检查画布的状态?那么当它已经空闲时你会在没有添加监听器的情况下执行// code吗?

2 个答案:

答案 0 :(得分:4)

没有记录的属性表示地图的空闲状态,但您可以自己实现。

假设您在地图初始化后立即调用此方法:

google.maps.event.addListener (map, 'idle', function(){
           this.lastBounds=this.getBounds();
}); 

然后你可以检查lastBounds-property是否等于map的当前边界:

if (map.lastBounds==map.getBounds()){
    //call function immediately
}else{
    //add listener
}

答案 1 :(得分:0)

已接受答案的解决方案不适用于v3。 Map :: getBounds方法使用bounds对象工厂,因此每次调用都会返回一个新对象。因此,与最后一个边界进行比较总是返回false。

解决方法是改为使用“ bounds_changed”事件,如下所示。

var isIdle = false; // Initializing the idle flag before the map is created

var map = new google.maps.Map(/* Map initialization arguments */)

map.addListener('idle', function() {
    isIdle = true;
});
map.addListener('bounds_changed', function() {
    isIdle = false;
});

if(isIdle) {
    // Do the idle stuff
} else {
    map.addListenerOnce('idle', function() {
        // Do idle stuff
    });
}