Javascript 每次添加标记时设置超时

Javascript 每次添加标记时设置超时,javascript,google-maps,settimeout,Javascript,Google Maps,Settimeout,我试图在谷歌地图中实现一些“强制动画”,通过显示一个接一个添加的标记 为此,我使用了以下代码 function Marker(i) { if(i > locations.length) return; var populationOptions = { strokeColor: '#FF0000', strokeOpacity: 0.8, strokeWeight: 2,

我试图在谷歌地图中实现一些“强制动画”,通过显示一个接一个添加的标记

为此,我使用了以下代码

function Marker(i) {
    if(i > locations.length) return;                
    var populationOptions = {
         strokeColor: '#FF0000',
         strokeOpacity: 0.8,
         strokeWeight: 2,
         fillColor: '#FF0000',
         fillOpacity: 0.35,
         map: map,
         center: citymap[locations[i][1]].center,
         radius: citymap[locations[i][1]].population
    };
    cityCircle = new google.maps.Circle(populationOptions);

    var t = setTimeout("Marker("+(i+1)+")",2000);
}
Marker(0);
我从:,但Firebug说函数标记没有在setTimeout()行定义

有什么想法吗

更新代码:

function Marker(city) {
    alert(city);
    var populationOptions = {
        strokeColor: '#FF0000',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#FF0000',
        fillOpacity: 0.35,
        map: map,
        center: citymap[city].center,
        radius: citymap[city].population
    };
    cityCircle = new google.maps.Circle(populationOptions);
}

for (city in citymap) {
    var t = setTimeout(function(){Marker(city);},2000);
}
我假设每次调用Marker时都会有2秒的延迟,但事实并非如此。它会等待2秒钟,然后一次性运行。此外,“城市”不会更新,添加相同的标记x乘以城市地图中城市的数量


for循环不会等待超时完成?

如果希望每2秒添加一个新城市,并且即使在处理完citymap中的所有项目后也不重复调用标记函数,则可以执行以下操作(还可以删除全局计数器变量)

功能标记(计数){
city=Object.keys(citymap)[count];
控制台.日志(城市);
变量填充选项={
strokeColor:“#FF0000”,
笔划不透明度:0.8,
冲程重量:2,
填充颜色:'#FF0000',
不透明度:0.35,
地图:地图,
中心:城市地图[城市]。中心,
半径:城市地图[城市].人口
};
cityCircle=new google.maps.Circle(populationOptions);
计数++;

如果(计数使用类似的方法

var count = 0;
function Marker() {
    city = Object.keys(citymap)[count];
    alert(city);
    var populationOptions = {
        strokeColor: '#FF0000',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#FF0000',
        fillOpacity: 0.35,
        map: map,
        center: citymap[city].center,
        radius: citymap[city].population
    };
    cityCircle = new google.maps.Circle(populationOptions);
    count++;
}
var i =1;
for (var city in citymap) {
    var t = setTimeout(function(){Marker();},i*2000);
    i++;
}

您已经将citymap声明为
var citymap={}
。将其修改为
var citymap=[];
在第38行中,您的超时在标记()内因此,这个bugI更新了代码!代码是以一个示例为例的,它应该是为OP工作的。@user234275是citymap数组或对象…?citymap是一个带有.center/.population/atributesCitymap的对象…?因为setTimeout使您的函数在指定毫秒后只工作一次..2000意味着您的函数将在2秒后执行n次。因此,您应该转到i*2000,它使您的函数在2,4,6秒后工作seconds@user2342275只有当你说它是一个对象还是一个对象数组,或者发布你的citymap值时,我才可以传递city值。for不需要等待函数返回。我如何使它同步?citymap值?citymap值是[object object],它没有表示形式。您可以相应地修改Marker()函数以使其工作,但我需要知道citymap JsonCorry的结构。我不理解。citymap是一个“类”?具有两个属性:人口和中心。标识以city:citymap[city]的名称运行.是吗?抱歉,如果不能更好地解释…更新了我的答案,这样它就可以像您希望的那样工作。并且不需要声明两个额外的全局变量,它就可以工作了
var count = 0;
function Marker() {
    city = Object.keys(citymap)[count];
    alert(city);
    var populationOptions = {
        strokeColor: '#FF0000',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#FF0000',
        fillOpacity: 0.35,
        map: map,
        center: citymap[city].center,
        radius: citymap[city].population
    };
    cityCircle = new google.maps.Circle(populationOptions);
    count++;
}
var i =1;
for (var city in citymap) {
    var t = setTimeout(function(){Marker();},i*2000);
    i++;
}