Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在每次迭代过程中添加暂停;for loop";使用Javascript?_Javascript - Fatal编程技术网

如何在每次迭代过程中添加暂停;for loop";使用Javascript?

如何在每次迭代过程中添加暂停;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;

情景: 我有一系列的单词和它们相应的含义,我必须在不同的div中以不同的间隔显示它们。 以下是我编写的代码:

<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