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

时间:2012-01-17 14:29:10

标签: javascript jquery delay wait seconds

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

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

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

11 个答案:

答案 0 :(得分:185)

您也可以通过这种方式延迟某些操作:

setTimeout(function (){

  // Something you want delayed.

}, 5000); // How long do you want the delay to be (in milliseconds)? 

答案 1 :(得分:155)

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

您需要递归调用每秒使用setTimeout执行检查的方法,而不是使用while循环:

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

check();

答案 2 :(得分:8)

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

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

funcx();

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

答案 3 :(得分:8)

jQuery的delay函数用于效果和效果队列,请参阅delay docs及其中的示例:

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

如果要观察变量的变量,可以执行类似

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

答案 4 :(得分:5)

delay()不会停止代码流,然后重新运行它。在JavaScript中没有实用的方法。所有事情都必须使用其他人提到的setTimeout等回调函数来完成。

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

答案 5 :(得分:5)

如果您使用的是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
}

答案 6 :(得分:4)

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

答案 7 :(得分:4)

只有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>

答案 8 :(得分:4)

es6 setTimeout

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

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

答案 9 :(得分:2)

function sleep(num) {
    var now = new Date();
    var stop = now.getTime() + num;
    while(true) {
        now = new Date();
        if(now.getTime() > stop) return;
    }
}

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

这段代码很适合我。

答案 10 :(得分:0)

就这么简单

function delay(seconds) {
  setTimeout(function() {
    return 0;
  }, seconds * 1000);
}