在指定的等待时间后运行javascript

Run javascript after a specify waiting time

本文关键字:运行 javascript 等待时间      更新时间:2023-09-26

我有一个javascript代码列表,如下

javascript: alert("hi1");
javascript: alert("hi2");
javascript: alert("hi3");
javascript: alert("hi4");
 ...
javascript: alert("hi100")

我想运行第一行,然后等待一个特定的时间。然后运行第二行,等待一个特定的时间。然后运行第三行…直到最后。

有人能帮我吗?

谢谢! !

JavaScript是单线程和基于事件的。它有一个事件循环调用你的代码,然后在你的代码返回之前不会运行任何其他东西。

这意味着你不能在两个语句之间"等待",因为它仍然会在你等待的时候阻止任何其他代码的运行。相反,您必须在稍后的时间安排一个新事件,该事件作为一个单独的函数执行其余的代码,然后返回到事件循环。

实际上,alert函数确实会阻塞所有内容,直到您解除警报,这就是它只应该用于真正严重问题的原因之一。

在使用setTimeout函数完成特定时间后调度某事。试着模仿您的示例:

var counter = 0;
function loop() {
  counter += 1;
  alert("hi" + counter);
  if (counter < 100) {
    setTimeout(loop, 1000);  // Wait one second (1000 ms), then run again.
  }
}
loop();

这里我假设警报之间的时间总是相同的(1秒)。如果它是一个取决于计数器的简单公式,则示例应该易于修改。

您也可以使用setInterval来启动一个以固定间隔触发计时器事件的重复计时器。在这种情况下,我没有使用这个,因为alert调用实际上使一切都等待,我们希望计时器只在警报被解除时启动。

作为旁注,没有必要在你的行前面加上"javascript:"。最可能的是,你不应该在任何地方写"javascript:"

使用javascript的setTimeout(function(), time_in_millis);

setTimeout(function(){alert("Hello")}, 3000);应该没问题。

您可以使用:

setTimeout(function(){alert("hi2");}, 3000);

等待3000毫秒后执行

将警报拆分为多个函数,并在调用下一个警报前使用setTimeout

function partA() {
  //line of code you want to execute
  window.setTimeout(partB,1000) //wait for a sec
}
function partB() {
 //line of code you want to execute
 window.setTimeout(partC,1000) //wait for a sec
}
function partC() {
 ...
}
//repeat

只需编写耗时的函数,并在需要暂停脚本时使用。

function pauseScript(seconds) {
  var stop = Date.now() + seconds*1000;
  for (var i; stop >= Date.now(); i++){}
}

那么你的代码就是这样的

alert("hi1");
pauseScript(10);   # wait 10 seconds
alert("hi2");
pauseScript(7);   # wait 7 seconds
alert("hi3");
pauseScript(8);   # wait 8 seconds
alert("hi4");
// etc...