【问题标题】:jQuery: Wait/Delay 1 second without executing codejQuery:等待/延迟 1 秒而不执行代码
【发布时间】:2012-02-12 08:34:36
【问题描述】:

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

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

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

【问题讨论】:

  • 尝试在回调中使用 setTimeout
  • 你用的是什么版本的jquery?
  • 这不是延迟函数的设计目的,它是为在排队的 jquery 事件之间使用而设计的(如 fade().delay().show())。你需要 setTimeOut 函数。
  • @JoJa:您在要点上是正确的,但是显示(和隐藏)的无参数形式不使用效果队列。
  • 请说明您想通过延迟实现什么目标。所有 JavaScript 都在单个线程上执行,将其冻结 X 秒可能会导致不良的用户体验。

标签: javascript jquery delay wait seconds


【解决方案1】:

你也可以这样延迟一些操作:

setTimeout(function (){
  
  // Something you want delayed.
            
}, 5000); // How long you want the delay to be, measured in milliseconds.

【讨论】:

  • 仅供参考,这不会中断执行流程,因此如果您需要“停止一切”几秒钟,您将需要类似 Niessner 发布的内容。
  • 是的...它是对函数的回调并且不会阻塞。感谢您的回答,它解决了我的问题。
  • 如果频率非常短,我们希望这个函数永远运行,它最终会爆栈吗?
【解决方案2】:

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

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

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

check();

【讨论】:

  • 我觉得,setTimeout 就够了。
  • 你的炸弹兄弟,这正是我需要修复我的代码。
  • @Jiemurat 和未来的任何其他人:setTimeout 不会中断执行流程。 Niessner 的伟大代码在条件成立之前获得这个!
  • 如果您不需要中断执行流程,您可以简单地使用setTimeout()
  • 我总是得到“检查不是函数”,但我的检查函数有两个参数
【解决方案3】:

ES6 设置超时

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

编辑:204586560000 ms 是原始问题和此答案之间的大致时间...假设我计算正确。

【讨论】:

  • 使用从原始问题到此答案的大致时间非常好
【解决方案4】:

如果您正在使用 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
}

【讨论】:

  • 我在异步函数中以类似的方式解决了这个问题,只需执行以下操作:await setTimeout(_ => {}, millis); 然后移至下一行。
【解决方案5】:

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);
})();

【讨论】:

  • setInterval 有第二个强制参数,时间以毫秒为单位;)
  • 感谢@sara.potyscki,已修复。
  • @JulianD。谢谢你的建议。我在谷歌搜索解决方案时遇到了这个问题。这正是我的项目所需要的。
【解决方案6】:

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

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

funcx();

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

【讨论】:

    【解决方案7】:

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

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

    【讨论】:

      【解决方案8】:
          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循环开始检查当前时间,直到当前时间晚于我们在上一段中指定的时间,一旦发生,函数将停止运行并继续执行此函数调用之后的任何时间。

      【讨论】:

      • 请提供一些有关答案的信息,以便将来的读者从您的答案中获得更多信息。
      【解决方案9】:

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

      【讨论】:

        【解决方案10】:

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

        【讨论】:

        • 在javascript中循环等待是个坏主意!循环运行时,所有 javascript 功能都将停止。这将产生意想不到的副作用。最好使用 setTimeout() 等非阻塞函数。
        猜你喜欢
        • 2013-10-02
        • 1970-01-01
        • 2020-06-14
        • 1970-01-01
        • 1970-01-01
        • 2016-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多