2011-09-20 5 views
0

J'essaie de faire en sorte que Google Maps continue de se déplacer sans à-coup, sauf si l'utilisateur déplace la souris sur la carte. L'utilisation du gestionnaire d'événements 'idle' provoque une animation de plateau instable. Utiliser d'autres événements ne me donnera pas de résultats. La récursion de ma fonction initPan() provoque simplement le crash de la page. Exemple de la méthode de panoramique continu "inactif" here.Google Maps Javascript API V3 - Panoramique continu

function initialize() { 
    var myOptions = { 
     zoom: 5, 
     center: markers.sanjose, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById('map_canvas'), 
      myOptions); 

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

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

function initPan(map) { 
    map.panBy(5, 0); 
} 

function stopPan(){ 
} 

Répondre

5

Pas beaucoup de vues, pas de commentaires, mais voici ma solution si jamais quelqu'un rencontre ce genre de situation.

Lors du déclenchement de méthodes répétitives par des événements utilisateur, tels que panBy(), j'ai rencontré des problèmes avec l'API V3. Alors que V2 avait l'événement 'moveend', il a été remplacé par l'événement 'idle'. Cependant, "inactif" a un court délai après le panoramique. Une autre option consiste à utiliser l'événement 'bounds_changed', mais cet événement se déclenche plusieurs fois par seconde, ce qui fait que la carte ne charge jamais les tuiles (donc pas d'apparence de panoramique). J'ai finalement résolu ce problème en ajoutant un délai d'expiration à la 'bounds_changed', en effaçant les délais d'attente qui empileraient sur les multiples déclencheurs d'événements. C'est l'extrait de code qui a résolu le problème.

google.maps.event.addListener(map, 'bounds_changed', function() { 
    if (moving) { 
    if (myTimeout) { 
     window.clearTimeout(myTimeout); 
    } 
    myTimeout = window.setTimeout(initPan(map), 2200); 
    } 
}); 

J'ai trouvé la solution sur le API forum, et vous pouvez voir un exemple de mon travail continu panoramique here. Et si cela n'a aucun sens, regardez le code complet sur l'exemple, et bonne chance.

+0

C'est très bien. Merci d'avoir partagé! – ampersand

+0

1 chose tho ... essayer ceci maintenant et il y a un problème avec ne pas trouver la variable "moving". Où dois-je initialiser cela? – ied3vil