是否有任何类似于 jQuery 的 JavaScript 方法delay()
或wait()
(将脚本的执行延迟特定时间)?
使用 JavaScript 在特定延迟后执行脚本
IT技术
javascript
settimeout
2021-02-01 13:26:57
6个回答
只是补充一下其他人所说的setTimeout
:如果将来要调用带参数的函数,则需要设置一些匿名函数调用。
您需要将该函数作为参数传递,以便稍后调用。实际上,这意味着名称后面没有括号。以下将立即调用警报,并显示“Hello world”:
var a = "world";
setTimeout(alert("Hello " + a), 2000);
要解决此问题,您可以输入函数的名称(如 Flubba 所做的那样),也可以使用匿名函数。如果需要传递参数,则必须使用匿名函数。
var a = "world";
setTimeout(function(){alert("Hello " + a)}, 2000);
a = "Stack Overflow";
但是,如果您运行该代码,您会注意到 2 秒后弹出窗口会显示“Hello Stack Overflow”。这是因为变量 a 的值在那两秒内发生了变化。要让它在两秒后说“Hello world”,您需要使用以下代码片段:
function callback(a){
return function(){
alert("Hello " + a);
}
}
var a = "world";
setTimeout(callback(a), 2000);
a = "Stack Overflow";
它将等待 2 秒钟,然后弹出“Hello world”。
只是稍微扩展一下...您可以直接在setTimeout
调用中执行代码,但正如@patrick所说,您通常会分配一个回调函数,就像这样。时间是毫秒
setTimeout(func, 4000);
function func() {
alert('Do stuff here');
}
如果你真的想要一个阻塞(同步)delay
函数(不管怎样),为什么不做这样的事情:
<script type="text/javascript">
function delay(ms) {
var cur_d = new Date();
var cur_ticks = cur_d.getTime();
var ms_passed = 0;
while(ms_passed < ms) {
var d = new Date(); // Possible memory leak?
var ticks = d.getTime();
ms_passed = ticks - cur_ticks;
// d = null; // Prevent memory leak?
}
}
alert("2 sec delay")
delay(2000);
alert("done ... 500 ms delay")
delay(500);
alert("done");
</script>
您需要使用setTimeout并将其传递给回调函数。您不能在 javascript 中使用 sleep 的原因是因为您会在此期间阻止整个页面执行任何操作。不是一个好计划。使用 Javascript 的事件模型并保持快乐。不要打它!