所以自昨天下午以来我一直都在这。我已经完成了基本代码的各种迭代,我试图得到我想要的结果(我希望每隔xx ms按顺序删除标记),但没有任何效果。我得到的结果是他们一次全部或根本没有。我很确定“根本没有”的问题是由于我纠正的语法错误并且得到了“一下子”。
所以这是函数......
function marker(location)
{
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(37.5, -98.35);
var mapOptions =
{
zoom: 5,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById('googleMap'), mapOptions);
var infowindow = new google.maps.InfoWindow(), marker, i;
for (i = 0; i < location.length; i++)
{
marker = new google.maps.Marker(
{
position: new google.maps.LatLng(location[i][1], location[i][2]),
animation: google.maps.Animation.DROP,
map: map
}
);
google.maps.event.addListener(marker, 'click', (function (marker, i)
{
return function ()
{
infowindow.setContent(location[i][0]);
infowindow.open(map, marker);
}
}
)(marker, i));
}
}
我认为我应该做的就是在内,就像这样......
for (i = 0; i < location.length; i++)
{
setTimeout(function() {
marker = new google.maps.Marker(
{
position: new google.maps.LatLng(location[i][1], location[i][2]),
animation: google.maps.Animation.DROP,
map: map
}
);
google.maps.event.addListener(marker, 'click', (function (marker, i)
{
return function ()
{
infowindow.setContent(location[i][0]);
infowindow.open(map, marker);
}
}
)(marker, i));
}, 1000)
}
但是这不起作用,我尝试过的其他事情也没有用。我已经看了很多解释,其中大部分似乎都有意义,但我可以想出来,我认为它更多的是关于for循环而不是其他任何东西。
作为一个例子,我也尝试在setTimeout中封装addlistener,想一想我是否运行addlistener代码并等待它会起作用。我想我在哪里,我需要想出一个方法来摆脱循环并等待被调用的函数返回一些东西,但我不知道该怎么做。
如果有人可以告诉我,我是在正确的轨道上,我会很感激。
答案 0 :(得分:1)
如果您不想立即获得所有结果,则需要给出不同的时间,因为循环立即执行,所有超时都是从执行时算起的:
setTimeout(function() {
}, 1000*i);
为避免使用相同i
值的所有迭代问题,请使用
for (i = 0; i < location.length; i++) {
(function(i){
setTimeout(function() {
}, 1000*i);
})(i);
}