在带有多个标记的Google地图中停止标记动画

桑迪普(Sandeep Pujare)

我在网页上集成了带有标记动画的地图。我在地图上有多个标记。我想要实现类似的效果,当单击任何一个标记时,其他标记的动画应停止,该动画当前正在运行。

目前,我能够在单击标记时停止播放相同标记的动画。在多个标记的情况下,必须有一些标记对象。

到目前为止,我已经做到了。

latlngarray是对象格式的经度和纬度数组。

var centerlatlng={center lat lng are here};
var zoomlevel=zoomlevel is here;
function initMap(){
map = new google.maps.Map(document.getElementById('map'),{
    center: centerlatlng,
    zoom: zoomlevel
});

if(latlngarray.length > 0){
    for(i=0; i < latlngarray.length; i++){
        marker = new google.maps.Marker({
            position: latlngarray[i],
            map: map
        });

        marker.addListener('click', function(){
            toggleBounce(this);
            map.setZoom(10);
            map.setCenter(marker.getPosition());
        });
    }
}}

function toggleBounce(ele){
if(ele.getAnimation() !== null){
    ele.setAnimation(null);
}else{
    ele.setAnimation(google.maps.Animation.BOUNCE);
}}

小提琴

地理编码

创建一个引用所有标记的数组,迭代该数组以取消所有标记上的动画,然后在单击的标记上设置动画。

marker.addListener('click', function() {
  for (var i = 0; i < markers.length; i++) {
    markers[i].setAnimation(null);
  }
  toggleBounce(this);
  map.setZoom(10);
  map.setCenter(marker.getPosition());
});

概念证明

代码段:

var map;
var centerlatlng = {
  lat: 37.4419,
  lng: -122.1419
};
var zoomlevel = 13;
var latlngarray = [{lat: 37.4418834, lng: -122.1430195}, // Palo Alto, CA, USA
  {lat: 37.4688273, lng: -122.1410751}, //East Palo Alto, CA, USA
  {lat: 37.424106, lng: -122.1660756}, // Stanford, CA, USA 
  {lat: 37.4529598, lng: -122.1817252} // Menlo Park, CA, USA 
];

function initMap() {
  var markers = [];
  map = new google.maps.Map(document.getElementById('map'), {
    center: centerlatlng,
    zoom: zoomlevel
  });

  if (latlngarray.length > 0) {
    for (i = 0; i < latlngarray.length; i++) {
      var marker = new google.maps.Marker({
        position: latlngarray[i],
        map: map
      });
      markers.push(marker);

      marker.addListener('click', function() {
        for (var i = 0; i < markers.length; i++) {
          markers[i].setAnimation(null);
        }
        toggleBounce(this);
        map.setZoom(10);
        map.setCenter(marker.getPosition());
      });
    }
  }
}

function toggleBounce(ele) {
  if (ele.getAnimation() !== null) {
    ele.setAnimation(null);
  } else {
    ele.setAnimation(google.maps.Animation.BOUNCE);
  }
}
google.maps.event.addDomListener(window, "load", initMap);
html,
body,
#map {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map"></div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章