如何在for循环上进行延迟,使div';什么是JavaScript?

如何在for循环上进行延迟,使div';什么是JavaScript?,javascript,html,css,Javascript,Html,Css,我试图在脚本的每次迭代中做一个延迟,使动态div基于数组元素,数组元素上有一些到图像的链接,以实现某种效果,就像GameCube控制台简介中的那样,div一个接一个地出现,而不是同时出现 我尝试过setTimeout()和异步函数,但它们就是不起作用 var arraydas=[“aviso1.jpg”、“aviso2.jpg”、“a”、“s”、“s”、2,3,4]; var数组=[“sYDqBU1.jpg”、“t1LuvGZ.jpg”、“l660ATK.jpg”、“iNWWr7b.jpg”]

我试图在脚本的每次迭代中做一个延迟,使动态div基于数组元素,数组元素上有一些到图像的链接,以实现某种效果,就像GameCube控制台简介中的那样,div一个接一个地出现,而不是同时出现

我尝试过setTimeout()和异步函数,但它们就是不起作用

var arraydas=[“aviso1.jpg”、“aviso2.jpg”、“a”、“s”、“s”、2,3,4];
var数组=[“sYDqBU1.jpg”、“t1LuvGZ.jpg”、“l660ATK.jpg”、“iNWWr7b.jpg”]
var htmlElements=“”;
对于(var i=0;i
html,正文{
宽度:100%;
身高:100%;
}
#容器{
身高:100%;
背景色:黑色;
}
.盒子{
宽度:25%;
身高:25%;
背景色:红色;
浮动:左;
}

解决方案是使用计时器,而不是循环。因为计时器会一次又一次地运行,它会产生一个循环的效果,但是在你的时间尺度上这样做会带来额外的好处

var数组=[“sYDqBU1.jpg”、“t1LuvGZ.jpg”、“l660ATK.jpg”、“iNWWr7b.jpg”]
//这将跟踪当前显示的数组索引
设计数器=0;
let container=document.getElementById(“容器”);
函数makeDiv(){
//如果我们已经到达数组的末尾,请停止计时器
如果(计数器>=array.length-1){clearInterval(计时器);}
//不要构建HTML字符串,而是创建DOM元素
设div=document.createElement(“div”);
//配置其属性
div.classList.add(“框”);
设img=document.createElement(“img”);
img.src=”https://i.imgur.com/“+数组[计数器];
//并将它们附加到DOM中
儿童分部(img);
子容器(div);
//增加计数器
计数器++;
}
//启动计时器
让定时器=设置间隔(makeDiv,1000)
html,正文{
宽度:100%;
身高:100%;
}
#容器{
身高:100%;
背景色:黑色;
}
.盒子{
宽度:25%;
身高:25%;
背景色:红色;
浮动:左;
}
div>img{宽度:100%;}

霍拉·卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯卡斯

我将继续使用
setTimeout
来控制要应用的延迟。函数应确定是否需要继续处理更多数组项:

片段

var数组=[“sYDqBU1.jpg”、“t1LuvGZ.jpg”、“l660ATK.jpg”、“iNWWr7b.jpg”]
var container=document.getElementById(“容器”);
无功电流=0;
函数getEm(){
const div=document.createElement('div');
设置超时(()=>{
div.innerHTML=``
子容器(div);
当前++
if(当前<数组长度){
getEm();
}
}, 500);
}
getEm()
html,
身体{
宽度:100%;
身高:100%;
}
#容器{
身高:100%;
背景色:黑色;
}
.盒子{
宽度:25%;
身高:25%;
背景色:红色;
浮动:左;
}


但最好不要使用
setInterval
,而是使用一个函数,将列表中的一个元素移动到新的
setTimeout
,如果这不会导致空列表的话。如果需要有限的重复,请使用
setTimeout
。(如果您需要无限重复,可以使用
setInterval
,但无论如何您可能仍然需要
setTimeout
)@Mike'Pomax'Kamermans我同意
.setTimeout()
是更好的选择。我在这里没有建议这样做,因为您需要进入递归调用,并且需要设置保护措施以防止多个计时器运行。由于此操作显然是新的,
setInterval()
解决了这个问题,没有副作用,而且更容易理解。我会继续使用
setTimeout
-您只需要在递归函数中使用它。您没有解释代码是如何工作的,箭头函数和模板文字的使用显然会超出OPs的范围。非常感谢,我想我会坚持使用这个解决方案,因为我可以将它用于未来可能使用的其他东西。此外,如果
getEm()
被多次调用,会发生什么情况?我想你会有点担心。这其实不是一个“问题”。OP会很好,我不会逐行解释他们今天在每个图书馆和包裹中遇到的基本物品——现在是2019年。让我们把它放在那里吧,祝你今天愉快。