2012-07-19 71 views
1

我知道有一个问题,关于这个Google Maps API v3 drop markers from XML with delay?,我跟着它,但我不得不犯了一个错误在我的代码,这就是:谷歌地图API V3降标志动画与延迟

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(最后一个)。

回答

3

尝试这样的:

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

你的问题是,当你超时的回调被调用,i变量已经有dataLength价值,你的循环已经到那个时候结束。

+0

我知道有一个聪明的人会在一分钟内解决这个问题。你是男人,非常感谢! – 2012-07-19 10:04:35

+0

@jesteuvidim不客气,我很高兴可以帮助某种方式。 – Engineer 2012-07-19 10:05:44