2013-01-07 52 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