2013-01-07 54 views
0

我需要在每個標記之間添加1秒的延遲。我想出了下面的代碼,但不能使它工作。任何想法 ?在Google地圖標記的地塊之間添加延遲

var latlng = new google.maps.LatLng(43,2.34); 
var myOptions = { 
    zoom: 7, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

for (var i=0, len=json.length; i<len; i++){ 
    obj = json[i]; 

    // Get lat/long and put them on the map 
    var lat = obj.latitude; 
    var long = obj.longitude; 

    display_marker(map, lat, long); 
} 

display_marker = function(map, lat, long){ 
    setTimeout(function(){}, 1000); 
    var marker = new google.maps.Marker({ 
    map: map, 
    position: new google.maps.LatLng(lat,long), 
    title: "Latitude: " + lat + "\nLongitude: " + long, 
    }); 
} 

回答

1

這裏有兩件事情出錯了。

第一個是,你使用setTimeout和一個空函數。您的代碼需要在該函數內部:

display_marker = function(map, lat, long){ 
    setTimeout(function() { 
    var marker = new google.maps.Marker({ 
     map: map, 
     position: new google.maps.LatLng(lat,long), 
     title: "Latitude: " + lat + "\nLongitude: " + long, 
    }); 
    }, 1000); 
} 

上是第二,你的循環觸發display_marker一個接一個,所以如果你解決問題1,即使如此,你所有的標記將後〜生成1000毫秒

一個簡單的方法來解決這個問題,是通過電流值,如果您的增量-VAR到您的顯示標記,並乘以您的setTimeout:

var obj, lat, long; 
for (var i=0, len=json.length; i<len; i++){ 
    obj = json[i]; 

    // Get lat/long and put them on the map 
    lat = obj.latitude; 
    long = obj.longitude; 

    display_marker(map, lat, long, i); 
} 

display_marker = function(map, lat, long, increment){ 
    setTimeout(function() { 
    var marker = new google.maps.Marker({ 
     map: map, 
     position: new google.maps.LatLng(lat,long), 
     title: "Latitude: " + lat + "\nLongitude: " + long, 
    }); 
    }, increment * 1000); 
} 

提示:看我做了什麼用變量聲明。你重新聲明你的循環中的變量

HINT2:我的代碼是未經測試,但它應該給你如何解決你的問題的正確思路

1

它看起來就像你可能預期setTimeout繼續之前阻止執行運行display_marker中的後續行。 setTimeout的工作方式是在執行堆棧中添加一個進程,該進程應該在指定的時間內執行,儘管它並不十分精確。

看起來你想要做的就是在迭代值時將display_marker的引用傳遞給setTimeout

setTimeout(function() { 
    display_marker(map, lat, long); 
}, 1000); 

約翰Resig的寫了一個偉大的博客文章我發現非常有用的JavaScript計時器:http://ejohn.org/blog/how-javascript-timers-work/。有關通過setTimeout傳遞參數的信息,請參閱此答案:https://stackoverflow.com/a/1190656/609206