如何延迟此代码在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();