【问题标题】:Google maps api v3 drop markers animation with delay谷歌地图 api v3 放置标记动画延迟
【发布时间】:2012-07-19 09:58:35
【问题描述】:

我知道有一个关于此Google Maps API v3 drop markers from XML with delay? 的问题,我关注了它,但我的代码中出现了错误,这里是:

function dropAnim(lat,lng,name) {

    console.log("---- " + lat + " - " + lng);

    var marker = new google.maps.Marker({

        position: new google.maps.LatLng(lat,lng),
        map: map,
        title: name,
        animation: google.maps.Animation.DROP,
        icon: imageCar,

    });

}

var counter = 0;

$.get('http://server.com/methods.php?m=loadPins', function(data) {

dataName = data.name.split(";");
dataLat = data.lat.split(";");
dataLng = data.lng.split(";");

dataLength = dataName.length-1;

for(var i=0;i<dataLength;i++) {

   var lat = dataLat[i];
   var lng = dataLng[i];

   console.log(lat + " - " + lng);

   setTimeout(function() {
      dropAnim(lat,lng,dataName[i]);
   }, counter * 400);

   counter++;
} 

},"json");

问题在于它将 3 个引脚加载到完全相同的位置。 dataLat 和 dataLng 加载 3 倍不同,我可以在控制台中看到这一点,但是当我从函数的 insde 中看到控制台中出现的内容时,有 3 个相同的 lat 和 lng(最后一个)。

【问题讨论】:

    标签: javascript jquery google-maps google-maps-api-3


    【解决方案1】:

    试试这样:

     setTimeout((function(i) {
         return function(){
            dropAnim(dataLat[i],dataLng[i],dataName[i]);
         };
     })(i), counter * 400);
    

    您的问题是,当您的超时回调被调用时,i 变量已经具有 dataLength 值,因为您的循环到那时已经完成。

    【讨论】:

    • 我知道会有一个聪明的人在一分钟内解决这个问题。你就是那个人,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2011-08-07
    • 2014-03-05
    相关资源
    最近更新 更多