设置超时/循环..还是一头雾水
setTimeout/Loop... still confused
所以从昨天下午开始,我就一直在讨论这个问题。我已经对我试图获得我想要的结果的基本代码进行了各种迭代(我希望每 xx 毫秒按顺序删除标记),但没有任何效果。我得到的结果是他们要么一次全部消失,要么根本不去。我相当确定"完全没有"问题是由于我纠正并得到"一次全部"的语法错误造成的。
所以这是函数...
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 范围内,就像这样......
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 循环而不是其他任何东西。
例如,我也尝试将addlistener封装在setTimeout中,认为如果我运行addlistener代码并等待它会起作用。我想我在哪里是我需要想出一种方法来打破循环并等待被调用的函数返回一些东西,但我不确定如何做到这一点。
如果有人能告诉我我是否走在正确的轨道上,我将不胜感激。
如果你不想一次得到所有的结果,你需要给出不同的时间,因为循环是立即执行的,所有的超时都是从这个执行的时间开始计算的:
setTimeout(function() {
}, 1000*i);
并且为了避免所有迭代都使用相同的i
值的问题,请使用闭包保护它
for (i = 0; i < location.length; i++) {
(function(i){
setTimeout(function() {
}, 1000*i);
})(i);
}
相关文章:
- 使用优化器在慢速连接上加载main.js时需要js超时
- 当浏览器控制台未打开时,为什么要求会导致Internet Explorer 9超时
- 超时功能的性能
- 使用不同的超时对数组中的每个项目进行角度动画处理
- 设置第一次执行的超时
- node.js测试事件是否是在不使用超时的情况下使用sinon.js发出的
- 使用javascript和随机暂停/超时快速循环文本
- 如何在jQuery事件处理程序中存储和重用超时
- 当定位模式设置为“0”时,总是达到关于地理定位的超时;仅设备”;
- 为什么页面重新加载会使设置超时无效,以及如何避免
- 立即设置超时
- 在promise中为回调添加超时并拒绝
- 如何设置$.ajax请求的超时,并在超时时间过长时进行重做
- iOS Safari Javascript设置超时问题
- 如何将嵌套设置超时转换为承诺
- XMLHTTPRequest脚本中没有internet连接和超时
- CXP项目中的Javascript超时
- 超时后才能再次单击
- 将变量传递到超时函数的Javascript
- 设置超时/循环..还是一头雾水