2013-05-05 15 views
6

Chciałbym mieć efekt odbicia, kiedy najecham na marker i zatrzymam animację, gdy mouseleave.detektor Mouseover i Mouseout dla znaczników Google Maps

Próbuję użyć mouseover i mouseOut zdarzenie na słuchaczy tak:

google.maps.event.addListener(marker, 'mouseover', function() { 
    this.setAnimation(google.maps.Animation.BOUNCE); 
}); 

google.maps.event.addListener(marker, 'mouseout', function() { 
    this.setAnimation(null); 
}); 

Ale to patrzy dziwnie. nie mogę wyjaśnić złego zachowania w słowach - proszę zobaczyć to 15 sekund film, który nagrałem:

===>http://youtu.be/Hcy8823nNQU

Co potrzebne jest prawdopodobnie mouseLeave zamiast odsunięciu myszy, ale to zdarzenie nie jest dostarczone przez ich API.

Odpowiedz

12

Kluczem jest, aby ustawić animację tylko wtedy, gdy nie jest już ustawiony jako:

google.maps.event.addListener(marker, 'mouseover', function() { 
    if (this.getAnimation() == null || typeof this.getAnimation() === 'undefined') { 

     /* 
     Because of the google maps bug of moving cursor several times over and out of marker 
     causes bounce animation to break - we use small timer before triggering the bounce animation 
     */ 

     clearTimeout(bounceTimer); 

     var that = this; 

     bounceTimer = setTimeout(function(){ 
      that.setAnimation(google.maps.Animation.BOUNCE); 
     }, 
     500); 

    } 
}); 

google.maps.event.addListener(marker, 'mouseout', function() { 

    if (this.getAnimation() != null) { 
     this.setAnimation(null); 
    } 

    // If we already left marker, no need to bounce when timer is ready 
    clearTimeout(bounceTimer); 

}); 

stworzyłem JS fiddle dla Ciebie.

Zmieniano:

Wydaje się, że za pomocą markera jako draggable: false złamie funkcjonalność, więc jeśli chcesz animację aby nadal pracować trzeba dodać także optimized: false, zaktualizowane moje skrzypce zawierać nich. Ponadto zauważyłem, że istnieje błąd, jeśli animacja znacznika jest włączana i wyłączana zbyt szybko, dodany mały zegar wskazujący przed rozpoczęciem animacji odskoku wydaje się naprawić problem.

+0

Dziękujemy za szybką odpowiedź. Dla mnie to nie działa, zdecydowanie mam jakiś problem gdzieś w innym kodzie. Na przykład, gdy usuwam warunki z twojego skrzypka JS, wciąż działa. –

+0

Oooh, rozumiem. Muszę dodać "draggable: true", a następnie działa! Posłuchaj, tutaj jest twoje skrzypce, ale ustawiam opcję przeciągania na false i widzimy problem, który mam - http://jsfiddle.net/Mas4D/1/ Ale dlaczego? Nie chcę, żeby marker był przeciągalny, hmm. –

+0

Odpowiadam za chwilę, wydawało mi się, że znalazłem może jakieś błędy w mapach google i jak je pokonać. :) –

Powiązane problemy