Javascript x秒后隐藏div
我试图在执行一些代码x几次后隐藏某个div。然而,这似乎不起作用 首先,我尝试在for循环中使用Javascript x秒后隐藏div,javascript,Javascript,我试图在执行一些代码x几次后隐藏某个div。然而,这似乎不起作用 首先,我尝试在for循环中使用setTimeout: var startCap = 1; var cap = 5; for(cap; cap > startCap; cap--){ setTimeout(function(){ startTimeElement.innerHTML = "Starting in " + cap + "."; }, 1000); }
setTimeout
:
var startCap = 1;
var cap = 5;
for(cap; cap > startCap; cap--){
setTimeout(function(){
startTimeElement.innerHTML = "Starting in " + cap + ".";
}, 1000);
}
我原以为上述操作会导致显示该行,等待一秒钟,然后继续执行for循环。结果完全跳过了超时。我试着记录它,然后在几毫秒后显示了四次1
然后我尝试使用SetInterval
,但也没有得到想要的结果。这两次都是在进入函数后直接将div的样式设置为none
,不考虑时间
var startCap = 1;
var cap = 5;
var interval = function(){
startTimeElement.innerHTML = "Starting in " + cap + ".";
cap--
if(cap < startCap){
clearInterval(capInterval);
}
};
var capInterval = setInterval(interval, 1000);
这一行的功能与超时/间隔相同,但在它的正下方。在第一个代码示例中,您将立即设置四个单独的超时,每个超时花费1秒。这四个项目将大致同时完成 您需要设置一个每秒可以调用一次的函数。在该函数中执行倒计时。只调用它一次,完成后让它再次调用自己,直到计数器达到零。像这样:
var secs = 5;
function runOnceASecond() {
startTimeElement.innerHTML = "Starting in " + secs + ".";
secs -= 1;
if ( secs==0 ) runMyCode();
else {
setTimeout(runOnceASecond,1000);
}
}
runOnceASecond();
然后,函数runMyCode()将在倒计时完成时执行它需要执行的操作——在您的例子中,执行CSS修改
只要在调用clearInterval()时修改CSS,您的第二块代码看起来应该可以工作。在第一个代码示例中,您立即设置了四个单独的超时,每个超时需要1秒。这四个项目将大致同时完成 您需要设置一个每秒可以调用一次的函数。在该函数中执行倒计时。只调用它一次,完成后让它再次调用自己,直到计数器达到零。像这样:
var secs = 5;
function runOnceASecond() {
startTimeElement.innerHTML = "Starting in " + secs + ".";
secs -= 1;
if ( secs==0 ) runMyCode();
else {
setTimeout(runOnceASecond,1000);
}
}
runOnceASecond();
然后,函数runMyCode()将在倒计时完成时执行它需要执行的操作——在您的例子中,执行CSS修改
只要在调用clearInterval()时修改CSS,您的第二块代码看起来应该可以工作。在第一个代码示例中,您立即设置了四个单独的超时,每个超时需要1秒。这四个项目将大致同时完成 您需要设置一个每秒可以调用一次的函数。在该函数中执行倒计时。只调用它一次,完成后让它再次调用自己,直到计数器达到零。像这样:
var secs = 5;
function runOnceASecond() {
startTimeElement.innerHTML = "Starting in " + secs + ".";
secs -= 1;
if ( secs==0 ) runMyCode();
else {
setTimeout(runOnceASecond,1000);
}
}
runOnceASecond();
然后,函数runMyCode()将在倒计时完成时执行它需要执行的操作——在您的例子中,执行CSS修改
只要在调用clearInterval()时修改CSS,您的第二块代码看起来应该可以工作。在第一个代码示例中,您立即设置了四个单独的超时,每个超时需要1秒。这四个项目将大致同时完成 您需要设置一个每秒可以调用一次的函数。在该函数中执行倒计时。只调用它一次,完成后让它再次调用自己,直到计数器达到零。像这样:
var secs = 5;
function runOnceASecond() {
startTimeElement.innerHTML = "Starting in " + secs + ".";
secs -= 1;
if ( secs==0 ) runMyCode();
else {
setTimeout(runOnceASecond,1000);
}
}
runOnceASecond();
然后,函数runMyCode()将在倒计时完成时执行它需要执行的操作——在您的例子中,执行CSS修改
只要在调用clearInterval()时修改CSS,第二块代码看起来应该可以工作。
setTimeout
不会阻止JavaScript执行。这就是为什么它继续执行for循环,将每个函数安排在几乎相同的时间执行
AFAIK没有本机的sleep函数,您也不希望这样,因为它会阻止在页面上执行任何其他JS,直到一切完成
您可以安排在不同的时间运行超时
var cap = 5;
for(var i = 0; i < cap; i++){
setTimeout((function(){
var remainingTime = cap - i;
return function(){
startTimeElement.innerHTML = "Starting in " + remainingTime + ".";
}
})(), 1000 * (i + 1));
}
var-cap=5;
对于(变量i=0;i
此外,由于闭包,您需要将剩余时间存储在不同的函数中,否则它将捕获i的最终值
setTimeout
不会阻止JavaScript执行。这就是为什么它继续执行for循环,将每个函数安排在几乎相同的时间执行
AFAIK没有本机的sleep函数,您也不希望这样,因为它会阻止在页面上执行任何其他JS,直到一切完成
您可以安排在不同的时间运行超时
var cap = 5;
for(var i = 0; i < cap; i++){
setTimeout((function(){
var remainingTime = cap - i;
return function(){
startTimeElement.innerHTML = "Starting in " + remainingTime + ".";
}
})(), 1000 * (i + 1));
}
var-cap=5;
对于(变量i=0;i
此外,由于闭包,您需要将剩余时间存储在不同的函数中,否则它将捕获i的最终值
setTimeout
不会阻止JavaScript执行。这就是为什么它继续执行for循环,将每个函数安排在几乎相同的时间执行
AFAIK没有本机的sleep函数,您也不希望这样,因为它会阻止在页面上执行任何其他JS,直到一切完成
您可以安排在不同的时间运行超时
var cap = 5;
for(var i = 0; i < cap; i++){
setTimeout((function(){
var remainingTime = cap - i;
return function(){
startTimeElement.innerHTML = "Starting in " + remainingTime + ".";
}
})(), 1000 * (i + 1));
}
var-cap=5;
对于(变量i=0;i
此外,由于闭包,您需要将剩余时间存储在不同的函数中,否则它将捕获i的最终值
设置超时
不阻止JavaScrip