我使用带有标记聚类器 v3 的谷歌地图 v3 来显示 1000 个标记。我还有一个侧面板,列出了每个标记的标题。当用户将鼠标悬停在面板中的标题上时,我会为相应的标记设置动画,并在鼠标悬停时停止动画。
当标记不在集群中时,这可以正常工作。当标记在集群中时,我遇到了问题。
如果标记在群集中,我首先将标记的地图对象从 null(之前由 markerClusterer 设置,以便在将标记放入群集后隐藏标记)更改为我的地图对象,然后为标记设置动画。同样,这有效。我遇到问题是在mouseout上。
在 mouseout 上,我将标记动画设置为 null,然后将标记的地图对象设置为 null。这符合您的预期(隐藏标记),但我无法让标记在任何后续悬停事件中再次显示。标记仍然存在于适当的集群对象中,我可以调用 setMap() 来设置标记的地图属性,但标记仍然不会出现在地图上。以下是相关代码:
if (event.type === 'mouseover' || event.type === 'mouseenter' ) {
if (!marker.getMap()) { //marker is in a cluster
inCluster = true;
marker.setMap(map)
} else {
inCluster = false
};
marker.setAnimation(google.maps.Animation.BOUNCE);
} else {
marker.setAnimation(null);
if (inCluster == true) { //hide the clusterized marker
marker.setMap(null)
}
};
如果我注释掉两个 setAnimation() 调用,那么代码将起作用,并且可以显示标记,然后按预期隐藏(只是没有动画)。此外,当我使用控制台时,我可以将标记从集群中显示出来,然后我可以对其进行动画处理,然后我可以对其进行取消动画处理,然后我可以一遍又一遍地再次隐藏它。但是,如果我在取消标记动画之前调用 setMap(null),那么我遇到了我的错误。
因此,只有在调用 setMap(null) 之前动画没有停止时,才会出现问题。我尝试设置一个计时器,让动画在调用 setMap 之前停止几百毫秒,这有时会起作用,但有时它会触发其他甚至更糟糕的行为。
任何解决此问题的帮助将不胜感激(并热切接受)!