如何在每次迭代过程中添加暂停;for loop";使用Javascript?
情景: 我有一系列的单词和它们相应的含义,我必须在不同的div中以不同的间隔显示它们。 以下是我编写的代码:如何在每次迭代过程中添加暂停;for loop";使用Javascript?,javascript,Javascript,情景: 我有一系列的单词和它们相应的含义,我必须在不同的div中以不同的间隔显示它们。 以下是我编写的代码: <body> <div id="worsd"> </div> <div id="meaning"> </div> <script> var wordss = [["word1","meaning1"],["word2","meaning2"],["word3","meaning3"]]; for(var i =0;
<body>
<div id="worsd">
</div>
<div id="meaning">
</div>
<script>
var wordss = [["word1","meaning1"],["word2","meaning2"],["word3","meaning3"]];
for(var i =0;i<wordss.length;i++)
{
var hellooo = wordss[i][0];
var hellooo1 = wordss[i][1];
document.getElementById('worsd').innerHTML = hellooo;
document.getElementById('meaning').innerHTML = hellooo1;
}
</script>
</body>
var-wordss=[“word1”,“meaning1”],[“word2”,“meaning2”],[“word3”,“meaning3”];
对于(var i=0;i您不能进行延迟,但您可以设置一个计时器,定期更新文本
我保留了您命名的变量,但我将这些变量包装在一个容器中,以保持全局范围干净。顺便说一下,这不是必需的
(function()//包装立即调用的函数。
{
var-wordss=[“word1”,“meaning1”],[“word2”,“meaning2”],[“word3”,“meaning3”];
var i=0;
//每次调用时只显示下一个单词的函数。
函数nextWord(){
var hellooo=wordss[i][0];
var hellooo1=字[i][1];
document.getElementById('worsd')。innerHTML=hellooo;
document.getElementById('means')。innerHTML=helloo1;
如果(++i>=字长)
i=0;//传递最后一个元素时换行。
};
//设置计时器,每2秒调用一次函数。
设定间隔(nextWord,2000年);
//立即显示第一个单词。
nextWord();
})();
var arrOfWords=[]//这里的单词
函数showWords(索引){
//你的话会在这里显示吗
}
var计数器=0;
var timeOut=setInterval(函数(){
计数器++;
if(计数器
您必须使用递归函数来执行所需操作。例如:
//在给定间隔内循环数组的计时器函数
函数计时器(列表、回调、时间/*、onFinish、索引*/){
var onFinish=arguments.length>3?参数[3]:void 0,
index=arguments.length>4?参数[4]:0;
如果(索引<列表长度){
callback.call(this,index,list[index]);
列表。\uuuu timed=setTimeout(函数(){
计时器(列表、回调、时间、onFinish、++索引);
},时间);
}else if(onFinish){
onFinish.call(这个);
}
返回{
取消:函数(){
如果(列表已计时!==void 0){
clearTimeout(列表已计时);
删除列表;
}
}
};
}
document.addEventListener('DOMContentLoaded',function(){
变量字=[
[“单词1”,“含义1”],
[“单词2”,“含义2”],
[“词语3”,“含义3”]
];
计时器(字、函数(索引、项){
var hellooo=项目[0];
var hellooo1=项目[1];
document.getElementById('worsd')。innerHTML=hellooo;
document.getElementById('means')。innerHTML=helloo1;
}, 3000);
});
这可能会有所帮助。在for循环中添加一个setTimout。使用生成器和setTimeout函数将完成您的工作恭喜,您刚刚从头开始发明了setInterval
:-)顺便说一句,这实际上不是一个递归函数,因为“递归”调用是通过计时器处理程序完成的,此时调用函数已经结束。setInterval
的问题是它没有等到它完成后再开始。因此,如果您在回调中执行昂贵的操作,您将无法获得所需的结果。理论上,这可能是正确的,但如果将文本放入div需要3秒钟以上,则您已经无法获得所需的结果。:)@GolezTrol好吧,这取决于你想在这里实现什么;)-顺便说一句,更改helper函数以立即调用回调(如果它是第一项)非常容易。@GolezTrol只需在setTimeout
之外调用回调
,正如您在我编辑的答案中所看到的那样。
var arrOfWords = [] // words here
function showWords(index) {
// do your words display stuff here
}
var counter = 0;
var timeOut = setInterval(function(){
counter++;
if(counter < arrOfWords.length)
showWords(counter)
else
clearInterval(timeOut)
}, 2000) // ms of loop
showWords(counter) // be sure to handle the first one