我的问题很直接。
google.maps.event.addListenerOnce(map, 'idle', function() {
// code
});
此代码片段将在地图当前忙于缩放或平移后触发。不是在它已经空闲的时候。
有没有办法在 if 语句中检查画布的状态?因此,当它已经空闲时,您会在// code
不添加侦听器的情况下进行操作吗?
我的问题很直接。
google.maps.event.addListenerOnce(map, 'idle', function() {
// code
});
此代码片段将在地图当前忙于缩放或平移后触发。不是在它已经空闲的时候。
有没有办法在 if 语句中检查画布的状态?因此,当它已经空闲时,您会在// code
不添加侦听器的情况下进行操作吗?
没有记录的属性表明地图的空闲状态,但您可以自己实现它。
假设您在地图初始化后立即调用它:
google.maps.event.addListener (map, 'idle', function(){
this.lastBounds=this.getBounds();
});
然后您可以检查 lastBounds-property 是否等于地图的当前边界:
if (map.lastBounds==map.getBounds()){
//call function immediately
}else{
//add listener
}
接受答案的解决方案不适用于 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
});
}