web-dev-qa-db-ja.com

jQuery:コードを実行せずに1秒待つ/遅らせる

私はjQueryで.delayメソッドを動かすことができません:

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

私は、制御されていない変更値が別の値以上になるまで待つためにwhileループを使用していますが、X秒間実行を妨害する方法が見つかりません。

107
Brian Graham

$ .delayは、実行を停止するのではなく、キュー内のアニメーションを遅らせるために使用されます。

Whileループを使用する代わりに、setTimeoutを使用して毎秒チェックを実行するメソッドを再帰的に呼び出す必要があります。

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

check();
156
Justin Niessner

このようにいくつかの操作を遅らせることもできます。

setTimeout(function (){

  // Something you want delayed.

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

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);
})();
8
Julian D.

JavaScript setTimeoutname __は非常に良い解決策です。

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

funcx();

JQueryのdelayname__関数は、主にjQueryアニメーションキューのアニメーションを遅らせるために使用されます。

8
Jay Tomten

es6 setTimeout

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

編集:204586560000 msは、元の質問とこの回答の間のおおよその時間です...私が正しく計算したと仮定すると。

5
thedanotto

delay()はコードの流れを止めずに再実行します。 JavaScriptでこれを実行する実用的な方法はありません。他の人が言及したsetTimeoutのようなコールバックを取る関数ですべてが行われなければなりません。

JQueryのdelay()の目的は、実行前にアニメーションキューを待機させることです。例えば$(element).delay(3000).fadeIn(250);は3秒後に要素をフェードインさせます。

5
Nathan MacInnes

Javascriptは非同期プログラミング言語なので、しばらくの間実行を停止することはできません。実行を[疑似]停止することができる唯一の方法はsetTimeout()を使用することです。これは遅延ではなく「遅延された関数コールバック」です。

4
Fabio Buda

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>
4
Faruk Omar

次のように簡単です。

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);
}
0
Raphael Spoerri