如何使用的setInterval或setTimeout的一个for循环?
-
27-09-2019 - |
题
我想设置的时间间隔,当一些代码运行,但只需要根据内容有数量来做到这一点。下面是一个简单示例:
5种总元素
运行代码每20秒对于找到的每个元素一次。
有人可以请给我一个基本的例子,如何用普通的JavaScript来做到这一点?我曾尝试一切只是执行所有的代码在一次而不是在同一时间做的一个元素。
解决方案
让我们假设你是在谈论一个数组或DOM集合
元素(function() {
var arr = [...],
len = arr.length;
(function doProcess() {
if (len--) {
/* do something with arr[len] */
setTimeout(doProcess, 20000);
}
})();
})();
编辑: 如果你不能逆转因任何原因阵列只是使用下一个版本
(function() {
var arr = [...],
len = arr.length;
(function doProcess(i) {
if (i) {
console.log(len - i);
/* do something with arr[len - i] */
setTimeout(function() { doProcess(--i); }, 20000);
}
})(len);
})();
其他提示
下面的一些代码我为动画使用jQuery图像:
var enter = 500;
var show = 4000;
var exit = 300;
var direction1 = "right";
var direction2 = "left";
var logo = document.getElementById('Box1').getElementsByTagName('img');
var Num = $('#Box1 img').length;
var time_each = (enter+show+exit);
function startBox1(){
for(x=0;x<=Num-1;x++){
Box1(x);
}
}
function Box1(x){
var buffer = time_each*x;
$(logo[x]).delay(buffer).show("slide", { direction: direction1 }, enter).delay(show).hide("slide", { direction: direction2 }, exit);
}
$(function(){
startBox1();
setInterval("startBox1()",(time_each)*Num);
});
诀窍是设置哪个等于所花费的每个动画由当前动画的索引的时间的缓冲区。所述FOR
循环立即运行的每个代码;的.delay()
动作和缓冲可变使它看起来如同每个动画是发生在一个接一个的。然后setInterval()
回忆FOR
循环每个动画完成后。它不断重新启动该过程。
您必须定义一个函数,该函数内它需要设置超时上本身。像这样:
var els = [1, 2, 3, 4, 5];
((function process_els(el_index) {
var el = els[el_index];
// do stuff to el here
console.log(el);
// do stuff to el above
if (el_index + 1 < els.length) {
setTimeout(function() { process_els(el_index + 1); }, 20000);
}
})(0);
不隶属于 StackOverflow