問題:
mouseout
イベントの発生が早すぎて、ユーザーがマーカー上でマウスをドラッグする速度が速すぎると、インフォボックスが開いたままになります。つまり...ユーザーがマーカーにすばやく出入りすると...mouseover
イベントが発生し、次にmouseout
イベントが発生します...しかし、placesServiceコールバックが実行されてib.open()
呼び出されます。
コード:
map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
var request = {
key: 'for_my_eyes_only',
location: new google.maps.LatLng(some_lat, some_lng);,
radius: '500',
types: ["restaurant"]
};
var service = new google.maps.places.PlacesService(map);
service.search(request, placesCallback);
function placesCallback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var place = results[i];
var marker = new google.maps.Marker({
map: map,
position: place.geometry.location,
});
//Infobox settings
var ib = new InfoBox({
//a bunch of irrelevant properties.
});
google.maps.event.addListener(marker, 'mouseover', markerMouseOverFactory(place, marker, ib));
google.maps.event.addListener(marker, 'mouseout', markerMouseOutFactory(ib));
}
}
}
function markerMouseOverFactory(place, marker, ib){
return function(){
var detailService = new google.maps.places.PlacesService(map);
detailService.getDetails({reference: place.reference}, function(details, status){
if (status == google.maps.places.PlacesServiceStatus.OK) {
ib.setContent(/*set some content using details*/);
ib.open(map, marker);
}
});
}
}
function markerMouseOutFactory(ib){
return function(){
ib.close();
}
}
質問:
グーグルマップのAJAXリクエストを放棄する方法はありますか?mouseout
リスナーでAJAXリクエストを放棄できれば、すべてがうまくいくでしょう。または、これをどのように解決しますか?マウスアウトで単純なフラグを使用しようとしましたが、機能しませんでした。