2012-07-19 51 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