Javascript 添加谷歌地图标记绘图之间的延迟

Javascript 添加谷歌地图标记绘图之间的延迟,javascript,google-maps,Javascript,Google Maps,我需要在标记的每个绘图之间添加1秒的延迟。我提出了以下代码,但无法使其工作。有什么想法吗 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"

我需要在标记的每个绘图之间添加1秒的延迟。我提出了以下代码,但无法使其工作。有什么想法吗

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,
  });
}
var-latlng=new google.maps.latlng(43,2.34);
变量myOptions={
缩放:7,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);

对于(var i=0,len=json.length;i这里有两件事情出错了

第一个是,将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_标记,因此,如果您解决了问题1,即使如此,所有标记都将在~1000毫秒后生成

解决此问题的一个简单方法是将当前值(如果增量变量为)传递给显示标记,然后将其乘以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);
}
var obj、lat、long;

对于(var i=0,len=json.length;i来说,您可能希望
setTimeout
在继续运行
display\u marker
中的后续行之前阻止执行,但是
setTimeout
的工作方式是向执行堆栈中添加一个进程,该进程应该在指定的时间前后执行,尽管它不是非常精确

看起来您要做的是在迭代值时将对
display\u marker
的引用传递到
setTimeout

setTimeout(function() {
  display_marker(map, lat, long);
}, 1000);
John Resig写了一篇关于JavaScript计时器的博文,我发现它非常有用:。有关通过
setTimeout
传递参数的信息,请参阅以下答案: