Search code examples
javascriptangularleafletopenstreetmapngx-leaflet

How to add pulse animation in asymmetric on marker


I`ve problem with adding animation on marker in leaflet lib

I use

new L.Icon({ iconUrl: 'https://cdn.rawgit.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-green.png',
     shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png',
     iconSize: [25, 41],
     iconAnchor: [12, 41],
     popupAnchor: [1, -34],
     shadowSize: [41, 41]
})

HTML:

<div id='map' style="height:600px;"></div>`

I tried to use https://github.com/mapshakers/leaflet-icon-pulse

But it does not work.

so have You any idea how can i make this?

One more, className in Icon or divIcon is ignored, when i put this in .css file


Solution

  • You can use this example and adjust it in angular

    // define the marker path icon for web-pack not to be confused 
    const markerIcon = {
          icon: L.icon({
           iconSize: [25, 41],
           iconAnchor: [10, 41],
           popupAnchor: [2, -40],
           // specify the path here
           iconUrl:
              "https://cdn.rawgit.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-green.png",
           shadowUrl:
              "https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png"
       })
    };
    
    // Define an icon called animatedCircleIcon and set the css
    const animatedCircleIcon = {
          icon: L.divIcon({
           className: "css-icon",
           html: '<div class="gps_ring"></div>',
           iconSize: [18, 22]
        })
     };
    
     // add the marker icon
     L.marker([50.5, 30.5], markerIcon).addTo(map);
     // add the animatedCircleIcon
     L.marker([50.5, 30.5], animatedCircleIcon).addTo(map);
    

    and then in styles:

    .gps_ring {
      border: 3px solid red;
      -webkit-border-radius: 40px;
      height: 18px;
      width: 18px;
      -webkit-animation: pulsate 1s ease-out;
      -webkit-animation-iteration-count: infinite;
      /*opacity: 0.0*/
    }
    
    @-webkit-keyframes pulsate {
      0% {
        -webkit-transform: scale(0.1, 0.1);
        opacity: 0;
      }
      50% {
        opacity: 1;
      }
      100% {
        -webkit-transform: scale(1.2, 1.2);
        opacity: 0;
      }
    }
    

    Demo

    Edit

    I saw later that you have already written asymmetric so if you want an example using ngx-leaflet you should use this demo