7

我的问题很直接。

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

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

有没有办法在 if 语句中检查画布的状态?因此,当它已经空闲时,您会在// code不添加侦听器的情况下进行操作吗?

4

2 回答 2

5

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

假设您在地图初始化后立即调用它:

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

然后您可以检查 lastBounds-property 是否等于地图的当前边界:

if (map.lastBounds==map.getBounds()){
    //call function immediately
}else{
    //add listener
}
于 2013-02-05T02:33:54.940 回答
1

接受答案的解决方案不适用于 v3。Map::getBounds 方法使用边界对象工厂,因此它为每次调用返回一个新对象。因此,与最后一个界限进行比较总是返回 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
    });
}
于 2019-12-26T13:16:53.320 回答