La mise à jour des Cartes V3 avec "inactif" à l'écoute. Ouverture InfowWindow déclenche ce et cache le marqueur
Charge la carte, obtient des résultats nouveaux et supprime les anciens:
google.maps.event.addListener(map, 'idle', function() {
updateMap();
});
Cette partie fonctionne très bien.
Mon problème arrive quand je clique sur un marqueur pour l'ouvrir de l'InfoWindow. L'ouverture d'une InfoWindow re-centres de la carte autour du marqueur, ce qui déclenche l'Auditeur à partir de ci-dessus, qui réinitialise la carte, en masquant l'InfoWindow.
Ici est de savoir comment je suis entrain de créer les marqueurs/InfoWindow:
var infowindow = new google.maps.InfoWindow({});
function makeMarker(LatLong, markerName) { //this is called from a loop
var marker = new google.maps.Marker({
position: LatLong,
map: map,
title:markerName,
content: "html for the infoWindow"
});
//Detect marker click
google.maps.event.addListener(marker, "click", function() {
infowindow.setContent(this.content);
infowindow.open(map, marker);
});
}
De toutes les suggestions sont grandement appréciés.
La meilleure suggestion pour vous est:
google.maps.event.addListenerOnce(map, 'idle', function() { updateMap(); });
OriginalL'auteur kamchatka | 2012-01-10
Vous devez vous connecter pour publier un commentaire.
updateMap
peut-être où le problème sous-jacent est. Lorsque vous êtes à la mise à jour de la carte que vous n'avez vraiment pas besoin d'être la suppression de tous les marqueurs et l'ajouter à nouveau; au contraire, vous voulez supprimer ceux que vous n'avez plus besoin et ajouter ceux que vous faites. (Certes, la première stratégie est beaucoup plus simple et qui fonctionne bien pour la plupart des cas d'utilisation.)Sinon, il existe deux approches que je voudrais explorer:
Stocker une variable globale comme
markerClick
et de mettre en œuvre quelque chose comme:Une ceveat qui est vraiment un moyen rapide hack, et pourrait certainement causer des problèmes si un marqueur est cliqué, qui ne déclenche pas l'inactivité de l'événement (c'est à dire un dans le centre ou quelque chose).
Ne pas utiliser
idle
plus. Les événements commedragend
etzoom_changed
peut mieux saisir le spécifique les interactions de l'utilisateur que vous cherchez.+1 C'est vraiment une très bonne réponse! Approche Simple qui m'a beaucoup aidé! Découvrez le plus (comme une "réponse") que j'ai ajouté pour les personnes qui pourraient être à la recherche de quelque chose sur la même ligne, mais en utilisant le glisser-déposer.
OriginalL'auteur bamnet
Ajoutant à bamnet de réponse et ce sera peut-être utile pour quelqu'un. Il n'est pas une réponse par lui-même, car il a été déjà répondu, mais j'ai eu presque le même problème. Dans mon cas, le conflit était entre les faisant glisser et en les redessinant.
Lorsque l'utilisateur a les faisant glisser et en prenant le marqueur trop loin que la carte était éreinté. Par conséquent, le "inactif" serait appelé quelque part dans le milieu de la faire glisser et déposer des processus provoquant le déplacement de marqueur pour être positionné sur le point de départ. Pour éviter cela, j'ai utilisé la même approche proposée par bamnet mais à l'aide de la
dragstart
etdragend
des événements comme suit:J'espère que ce sera utile pour quelqu'un.
OriginalL'auteur Eduardo