2013-05-05 12 views
6

Mi piacerebbe avere un effetto di rimbalzo quando topo il mouse sul marcatore e interrompo l'animazione quando il mouseleave.Listener mouseover e mouseout per indicatore Google Maps

Sto cercando di utilizzare mouseover ed evento mouseout sugli ascoltatori in questo modo:

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

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

Ma questo sta cercando strano. Non riesco a spiegare il comportamento sbagliato a parole - si prega di vedere questo video di 15 secondi che ho registrato:

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

cosa ho bisogno è probabilmente mouseLeave invece di mouseout, ma tale evento non è fornito dalla loro API.

risposta

12

La chiave è quello di impostare l'animazione solo quando non è impostato già, come:

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); 

}); 

ho creato un JS fiddle per voi.

Modificato:

Sembra che usando pennarello come draggable: false si romperà la funzionalità, quindi se volete animazione ancora lavorare è necessario aggiungere anche optimized: false, aggiornato il mio violino per contenere questi. Inoltre ho visto che c'è un bug se l'animazione del marker è attivata e disattivata troppo velocemente, aggiunto un piccolo timer per indicare prima di iniziare l'animazione di rimbalzo, sembra risolvere il problema.

+0

Grazie per la rapida risposta. Per me non funziona, sicuramente ho qualche problema in qualche altro codice. Ad esempio quando rimuovo le condizioni dal tuo violino JS, funziona ancora. –

+0

Oooh, ho capito. Devo aggiungere "draggable: true", e poi funziona! Guarda, ecco il tuo violino, ma ho impostato su falso e vediamo il problema che ho - http://jsfiddle.net/Mas4D/1/ Ma perché? Non voglio che il marcatore sia trascinabile, hmm. –

+0

Rispondo in un secondo, mi sembra di trovare forse alcuni bug di google maps e come superarli. :) –

Problemi correlati