Google会延迟地映射api v3 drop marker动画

我知道有一个关于这个来自XML的Google Maps API v3 drop标记有延迟的问题吗? 我跟着它,但我不得不在我的代码中犯了一个错误,这里是:

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倍不同,我可以在控制台中看到,但当我看到控制台中出现的函数时,有3个相同的lat和lng(最后一个)。

试试这样:

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

你的问题是,当调用超时的回调时, i变量已经有dataLength值,因为你的循环已经完成了那个时间。