69 votes

L'événement Google Map bounds_changed a été déclenché plusieurs fois lors du déplacement

J'ai une carte google avec des marqueurs. Je souhaite que mes repères soient actualisés lorsque la carte est déplacée / zoomée ...

Google recommande d'utiliser l'événement bounds_changed pour cela, mais lorsque je déplace la carte, l'événement est déclenché pour chaque pixel dont je déplace la carte . Je souhaite que la carte ne soit rafraîchie que lorsque l'utilisateur cesse de la déplacer, c'est-à-dire qu'il relâche le bouton de la souris après l'avoir fait glisser.

Comment puis je faire ça ?

Merci

134voto

Matthieu Napoli Points 9453

Il s’avère que c’est un bogue signalé: http://code.google.com/p/gmaps-api-issues/issues/detail?id=1371 .

L’équipe de Google recommande d’utiliser l’événement "inactif". Par exemple :

 google.maps.event.addListener(map, 'idle', function() {
});
 

13voto

0x1b Points 78

Alors que la réponse choisie est la meilleure pour la plupart des circonstances. Si vous voulez contrôler le retard vous-même, vous pouvez simplement utiliser quelque chose comme:

  var mapupdater;

 {....}

 google.maps.event.addListener(map, "bounds_changed", mapSettleTime); 


 function mapSettleTime() {
     clearTimeout(mapupdater);
     mapupdater=setTimeout(getMapMarkers,500);
 }
 

10voto

Himanshu Khurana Points 131
Add a timeout, that runs your code 500ms after the event fires, each time the event fires clear the timeout and create a new one.
google.maps.event.addListener(map, 'bounds_changed', (function () {
    var timer;
    return function() {
        clearTimeout(timer);
        timer = setTimeout(function() {
            // here goes an ajax call
        }, 500);
    }
}()));

2voto

Galen Points 20535

essayez d'utiliser à la fois zoom_changed et dragend

1voto

yadavr Points 166

Voici un petit extrait qui supprimera tous les appels redondants 'bound_changed':

 var timeout;
google.maps.event.addListener(map, 'bounds_changed', function () {
window.clearTimeout(timeout);
timeout = window.setTimeout(function () {
    //do stuff on event
    }, 500);
}); //time in ms, that will reset if next 'bounds_changed' call is send, otherwise code will be executed after that time is up
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X