JQuery: 等待/延迟1秒而不执行代码

我无法在 jQuery 中使用 .delay方法:

$.delay(3000); // not working
$(queue).delay(3000); // not working

我使用 while 循环等待,直到一个不受控制的更改值大于或等于另一个更改值,而且我无法找到任何方法将执行暂停 X 秒。

563394 次浏览

延迟用于延迟队列中的动画,而不是停止执行。

与使用 while 循环不同,您需要使用 setTimeout递归地调用一个每秒执行检查的方法:

var check = function(){
if(condition){
// run when condition is met
}
else {
setTimeout(check, 1000); // check again in a second
}
}


check();

JavaScript setTimeout是一个很好的解决方案:

function funcx()
{
// your code here
// break out here if needed
setTimeout(funcx, 3000);
}


funcx();

JQuery 中的 delay函数主要用于延迟 jQuery 动画队列中的动画。

delay()不会停止代码流然后重新运行它。在 JavaScript 中没有实际的方法可以做到这一点。所有的事情都必须通过接受回调的函数来完成,比如其他人提到的 setTimeout

JQuery 的 delay()的目的是让动画队列在执行之前等待。因此,例如 $(element).delay(3000).fadeIn(250);将使元素在3秒后淡出。

JQuery 的 delay函数是用来处理效果和效果队列的,参见 delay文件和其中的例子:

$('#foo').slideUp(300).delay(800).fadeIn(400);

如果希望观察变量的更改,可以执行以下操作

(function() {
var observerInterval = setInterval(function() {
if (/* check for changes here */) {
clearInterval(observerInterval);
// do something here
}
}, 1000);
})();

Javascript 是一种异步编程语言,所以你不能停止执行一段时间; 唯一可以[伪]停止执行的方法是使用 setTimeout(),它不是一个延迟,而是一个“延迟函数回调”。

你也可以通过这种方式延迟一些操作:

setTimeout(function (){
  

// Something you want delayed.
            

}, 5000); // How long you want the delay to be, measured in milliseconds.

只有 javascript 没有 jQuery 它也能工作

<!DOCTYPE html>
<html>
<head>
<script>
function sleep(miliseconds) {
var currentTime = new Date().getTime();
while (currentTime + miliseconds >= new Date().getTime()) {
}
}


function hello() {
sleep(5000);
alert('Hello');
}
function hi() {
sleep(10000);
alert('Hi');
}
</script>
</head>
<body>
<a href="#" onclick="hello();">Say me hello after 5 seconds </a>
<br>
<a href="#" onclick="hi();">Say me hi after 10 seconds </a>




</body>
</html>

ES6 setTimeout

setTimeout(() => {
console.log("we waited 204586560000 ms to run this code, oh boy wowwoowee!");
}, 204586560000);

编辑: 204586560000毫秒是原始问题和这个答案之间的大约时间... 假设我计算正确。

如果您使用的是 ES6特性,并且使用的是异步函数,那么您可以使用这个函数在一定时间内有效地停止代码执行:

const delay = millis => new Promise((resolve, reject) => {
setTimeout(_ => resolve(), millis)
});

这就是你如何使用它:

await delay(5000);

它将停止请求的毫秒数,但是 只有在使用异步函数的情况下。示例如下:

const myFunction = async function() {
// first code block ...


await delay(5000);


// some more code, executed 5 seconds after the first code block finishes
}
    function sleep(num) {
let now = new Date();
let stop = now.getTime() + num;
while(true) {
now = new Date();
if(now.getTime() > stop) return;
}
}


sleep(1000);   // 1 second
alert('here');

它获取以毫秒为单位的当前时间,并添加 num(这是一个未来时间) ,其中将 num添加到当前时间中许多毫秒。

一个无限 while 循环开始检查当前时间,直到当前时间比我们在前一段中指定的时间晚,一旦发生这种情况,函数停止运行,执行继续进行该函数调用之后的任何操作。