5

wiem, że mogę ożywić „dodając” od znacznika na mapie Google, a la https://developers.google.com/maps/documentation/javascript/overlays#MarkerAnimationsOdwrócić animację do usuwania znaczników Google Map?

Czy mimo to mogę zrobić animację odwrotnej do demontażu znacznik z mapy? Chciałbym, żeby powrócił na szczyt mapy po usunięciu znacznika ... czy to możliwe?

Oto mój kod usunąć, więc daleko (tylko usuwa go z mapy, bez animacji):

// TODO figure out if there is a way to animate this removal, like the add 
$.contextualMap.prototype.removeMarker = function(m) { 
    m.mapMarker.setMap(null); 
    m.mapMarker = null; 
}; 
+0

nie wydaje się być możliwe za pośrednictwem standardu [google.maps.Animation] (https://developers.google. com/maps/documentation/javascript/reference # Animation), ponieważ istnieją tylko 2 obsługiwane animacje (BOUNCE i DROP). Prawdopodobnie będziesz musiał stworzyć własną animację za pomocą normalnego javascriptu i przesunięcia znacznika na mapie .... Nie zapomnij wyłączyć cienia lub obsługiwać go specjalnie ... – TMS

Odpowiedz

11

Jako, że google.maps.Animation nie obsługuje animacji odwrotnej upuszczania, musisz napisać własny skrypt do animowania znacznika.

można napisać coś takiego:

function removeMarkerWithAnimation(map, marker){ 
    (function animationStep(){ 
     //Converting GPS to World Coordinates 
     var newPosition = map.getProjection().fromLatLngToPoint(marker.getPosition()); 

     //Moving 10px to up 
     newPosition.y -= 10/(1 << map.getZoom()); 

     //Converting World Coordinates to GPS 
     newPosition = map.getProjection().fromPointToLatLng(newPosition); 
     //updating maker's position 
     marker.setPosition(newPosition); 
     //Checking whether marker is out of bounds 
     if(map.getBounds().getNorthEast().lat() < newPosition.lat()){ 
      marker.setMap(null); 
     }else{ 
      //Repeating animation step 
      setTimeout(animationStep,10); 
     } 
    })(); 
} 

Oto DEMO:

+0

Dzięki! Jest to zdecydowanie dobry punkt wyjścia i dokładnie to, czego szukałem. – neezer

+0

@neezer Dla celów demonstracyjnych użyłem "liniowego" łagodzenia, ale dla bardziej realistycznej animacji, prawdopodobnie musisz zmienić parametr 'newPosition.y' używając innej funkcji wygładzania. – Engineer

0

Mój pomysł:

  1. tworzyć animowane GIF latającego pinezkę, która następnie zanika.
  2. na znaczniku usuń zdarzenie, zamień icon, aby wyświetlić GIF
  3. Po utworzeniu GIF-a powinieneś znać długość czasu animacji. Następnie setTimeout z tą wartością, aby wywołać setMap (null)

Może zapobiegać propagacji zdarzeń, co jest jedną z wielu możliwych wad.