我的问题很简单。
google.maps.event.addListenerOnce(map, 'idle', function() {
// code
});
在地图当前忙缩放或平移后,会触发此代码段。不是在它已经空闲的时候。
有没有办法在if语句中检查画布的状态?那么当它已经空闲时你会在没有添加监听器的情况下执行// code
吗?
答案 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
});
}