マーカークラスターv3でグーグルマップv3を使用して、数千のマーカーを表示します。各マーカーのタイトルを一覧表示するサイドパネルもあります。ユーザーがパネルのタイトルにカーソルを合わせると、対応するマーカーをアニメーション化し、マウスアウトでのアニメーション化を停止します。
これは、マーカーがクラスター内にない場合に正常に機能します。マーカーがクラスター内にあるときに問題が発生します。
マーカーがクラスター内にある場合は、最初にマーカーのマップオブジェクトをnull(以前はmarkerClustererによって設定されていたため、クラスターに配置するとマーカーが非表示になるように設定)からマップオブジェクトに変更してから、マーカーをアニメーション化します。繰り返しますが、これは機能します。私が問題を経験するのはマウスアウトです。
マウスアウト時に、マーカーアニメーションを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)
}
};
2つのsetAnimation()呼び出しをコメントアウトすると、コードが機能し、マーカーを表示したり、期待どおりに非表示にしたりできます(アニメーション化されていないだけです)。また、コンソールをいじってみると、クラスターの外にマーカーを表示してから、アニメーション化してから、アニメーション化を解除してから、何度も何度も非表示にすることができます。しかし、マーカーのアニメーションを解除する前にsetMap(null)を呼び出すと、バグが発生します。
したがって、この問題は、setMap(null)を呼び出す前にアニメーションが停止していない場合にのみ発生します。setMapを呼び出す前にアニメーションを数百ミリ秒停止するようにタイマーを設定しようとしましたが、これは機能する場合もありますが、他の、さらに悪い動作をトリガーする場合もあります。
これを解決するための助けをいただければ幸いです(そして熱心に受け入れられます)!