JQuery: Wait/Delay 1 секунда без выполнения кода

Я не могу получить метод .delay, работающий в jQuery:

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

Я использую цикл while, чтобы ждать, пока неконтролируемое изменяющееся значение больше или равно другому, и я не могу найти способ выполнить hault-выполнение в течение X секунд.

Ответ 1

$. delay используется для задержки анимации в очереди, а не для остановки выполнения.

Вместо использования цикла while вам необходимо рекурсивно вызывать метод, который выполняет проверку каждую секунду, используя setTimeout:

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

check();

Ответ 2

Вы также можете просто отложить некоторую операцию следующим образом:

setTimeout(function (){

  // Something you want delayed.

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

Ответ 3

ES6 setTimeout

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

Изменение: 204586560000 мс - это приблизительное время между исходным вопросом и этим ответом... при условии, что я рассчитал правильно.

Ответ 4

JavaScript setTimeout - очень хорошее решение:

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

funcx();

Функция delay в jQuery в основном используется для задержки анимации в очереди анимации jQuery.

Ответ 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);
})();

Ответ 6

delay() не останавливает поток кода, а затем повторно запускает его. В JavaScript нет практического способа сделать это. Все должно выполняться с функциями, которые принимают обратные вызовы, такие как setTimeout, о которых говорили другие.

Цель jQuery delay() заключается в том, чтобы ожидание очереди анимации перед выполнением. Так, например, $(element).delay(3000).fadeIn(250); заставит элемент исчезать через 3 секунды.

Ответ 7

Только 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

Javascript - это асинхронный язык программирования, поэтому вы не можете остановить выполнение на время; единственный способ, которым вы можете [pseudo] остановить выполнение, - использовать setTimeout(), который не является задержкой, а "отложенным обратным вызовом функции".

Ответ 9

Это так просто:

function delay(seconds) {
   var x = 0;
   setTimeout(function() {
      if(x){
         return undefined;
      }
      x++;
   }, seconds * 1000);
}
for(var x = 0; x < 5; x++){
   alert("hi");
   delay(10);
}