Google Maps API v3:animation_changed事件触发两次?

时间:2013-08-22 20:24:14

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

我正在使用Google Maps JavaScript API的v3创建地图。我正在将Markers放到地图上,并为每个Marker打开InfoWindows,以及向侧边div添加信息面板,但我不希望InfoWindows或侧面信息面板在drop动画之后才打开完成了,所以我做了一个事件监听器。

google.maps.event.addListener(newMarker, 'animation_changed', function() {
    if (this.animation == null) {
        // Open InfoWindow
        // Add side info panel
    }
});

问题是,当Marker完成删除时,此侦听器会触发两次,而if测试会在两次都计算为true。这对InfoWindow来说不是问题;一旦打开,它就会打开,第二次调用.open()就不会做任何事情。但是每个事件都会将信息div添加到侧面板两次,这是一个问题。现在,我创建了一个非常简单的解决方法:

google.maps.event.addListener(newMarker, 'animation_changed', function() {
    if (this.animation == null && this.dropped != true) {
        this.dropped = true;
        // Open InfoWindow
        // Add side info panel
    }
});

这是我的预期效果,但感觉非常hacky。有没有更好的方法来做这个?我不正确地打电话给听众吗?

1 个答案:

答案 0 :(得分:0)

哈哈,我完全没有想到这一点;谢谢,Dr.Molle。在第一次发射后停止聆听。

var myListener = google.maps.event.addListener(newMarker, 'animation_changed', function() {
    google.maps.event.removeListener(myListener);
        if (this.animation == null) {
        // Open InfoWindow
        // Add side info panel
    }
});