谷歌地图动画标记移动

时间:2017-09-20 07:48:02

标签: javascript google-maps-api-3

所以我试图顺利移动标记,但id不起作用。 Marker正在移动,但不是很顺利,如果我要写的话,我可以获得相同的结果

marker[n].setPosition(moveto); 

我已经在控制台中显示了所有变量,并且很好,所有变量都以正确的方式增加,但似乎

marker[n].setPosition(latlng);

仅在循环的最后一次迭代时被调用。

这是我的代码:

function animatedMove(n, current, moveto){
        var lat = current.lat();
        var lng = current.lng();

        var deltalat = (moveto.lat() - current.lat())/100;
        var deltalng = (moveto.lng() - current.lng())/100;

        for(var i=0;i<100;i++){
            lat += deltalat;
            lng += deltalng;

            latlng = new google.maps.LatLng(lat, lng);

            setTimeout(
                function(){
                    marker[n].setPosition(latlng);
                },10
            );
        }
    }

1 个答案:

答案 0 :(得分:3)

您的代码正在做什么

for(var i=0;i<100;i++){
// compute new position
// run function "f" that updates position of marker after a delay of 10

当发生延迟后功能“f”(((function(){marker[n].setPosition(latlng);})运行时,循环已经结束并且已到达标记的最终位置。

关注https://stackoverflow.com/a/24293516/2314737这里有一个可能的解决方案

function animatedMove(n, current, moveto) {
  var lat = current.lat();
  var lng = current.lng();

  var deltalat = (moveto.lat() - current.lat()) / 100;
  var deltalng = (moveto.lng() - current.lng()) / 100;

  for (var i = 0; i < 100; i++) {
    (function(ind) {
      setTimeout(
        function() {
          var lat = marker.position.lat();
          var lng = marker.position.lng();

          lat += deltalat;
          lng += deltalng;
          latlng = new google.maps.LatLng(lat, lng);
          marker.setPosition(latlng);
        }, 10 * ind
      );
    })(i)
  }
}

您可以查看演示here