如何延迟此代码在JavaScript中运行?

如何延迟此代码在JavaScript中运行?,javascript,html,timing,Javascript,Html,Timing,我编写了以下代码来更改图像: change = function(){ for (r=0; r<6; r++){ for (i = 0; i < 6 ; i++) { setInterval(imgfile(number=i+1), 5000); } } } imgfile= function(number){ a = 'document.getElementById("imgdiv").src =

我编写了以下代码来更改图像:

change = function(){
    for (r=0; r<6; r++){
        for (i = 0; i < 6 ; i++) { 
            setInterval(imgfile(number=i+1), 5000);
        }
    }
}

imgfile= function(number){
    a = 'document.getElementById("imgdiv").src = "images/'+number+'.svg"';
    eval(a);
}
change=function(){

对于(r=0;r您要执行
setTimeout()

setTimeout
暂停千秒值,然后执行代码。其中
setInterval
每千秒运行一次代码

是的,不要做
change.setInterval
或其他任何事情,它只是
setInterval

例如,在for循环中使用此函数替换
setInterval
函数

setTimeout(imgfile(i+1), 5000);
change=函数(i=0){
imgfile(i%6+1);//更改图像

如果(i对于另一个问题,我写了一个很好的实用函数,它有很多用途,但也可以很容易地处理这个场景。主要问题是设置不同延迟之间没有时间间隔。因此,您将6个不同的操作设置为在5000ms内全部发生,并且所有操作都将在同一时刻发生

这是我的

下面是这个答案的效用函数,以及它在你的问题中的应用

函数doHeavyTask(参数){
var totalMillisAllotted=参数totalMillisAllotted;
var totalTasks=params.totalTasks;
var tasksPerTick=params.tasksPerTick;
var tasksCompleted=0;
var totalTicks=Math.ceil(totalTasks/tasksPerTick);
var initialDelay=params.initialDelay;
var区间=null;
如果(totalTicks==0)返回;
var doTick=函数(){
var totalByEndOfTick=Math.min(tasksCompleted+tasksPerTick,totalTasks);
做{
参数任务(tasksCompleted++);
}while(任务完成=totalTasks)清除间隔(interval);
};
//立即勾选一次,然后根据需要使用setInterval勾选任意次数
如果(!initialDelay)doTick();
if(tasksCompleted})大概是这样的吧

var index, imgCount, loopCount, imgTag, countdown;

index = 0;
imgCount = 6;
loopCount = 6;
imgTag = document.getElementById('imgdiv');

countdown = function () {
  if (index < imgCount * loopCount) {
    imgTag.src = 'images/' + index % imgCount + '.svg';
    index = index + 1;
    setTimeout(countdown, 5000);
  }
};

countdown();
var指数、imgCount、loopCount、imgTag、倒计时;
指数=0;
imgCount=6;
循环计数=6;
imgTag=document.getElementById('imgdiv');
倒计时=函数(){
if(索引

在这里,我们避免了双循环,并使用模块化数学(索引%imgCount)来获得正确的文件号。

为什么
eval()
?O.
eval
的另一条规则是:不要使用eval,因为eval是邪恶的。你需要用
let
关键字来阻止
i
变量的作用域,或者将其包装在一个闭包中!可能重复的@MattWebb单凭此更改是不够的,因此代码可以实现它应该实现的功能。请不要试图教给其他人那些不需要的东西你不太了解自己。setTimeout(imgfile(number=i+1),5000);将立即调用imgfile。哦,我明白,我只是把他拥有的代码放进去了。但是,是的,参数没有那么大意义。用很多不属于解决方案的代码来控制新手总是一个好主意…;)
var index, imgCount, loopCount, imgTag, countdown;

index = 0;
imgCount = 6;
loopCount = 6;
imgTag = document.getElementById('imgdiv');

countdown = function () {
  if (index < imgCount * loopCount) {
    imgTag.src = 'images/' + index % imgCount + '.svg';
    index = index + 1;
    setTimeout(countdown, 5000);
  }
};

countdown();