私はjQueryで.delay
メソッドを動かすことができません:
$.delay(3000); // not working
$(queue).delay(3000); // not working
私は、制御されていない変更値が別の値以上になるまで待つためにwhileループを使用していますが、X秒間実行を妨害する方法が見つかりません。
$ .delayは、実行を停止するのではなく、キュー内のアニメーションを遅らせるために使用されます。
Whileループを使用する代わりに、setTimeout
を使用して毎秒チェックを実行するメソッドを再帰的に呼び出す必要があります。
var check = function(){
if(condition){
// run when condition is met
}
else {
setTimeout(check, 1000); // check again in a second
}
}
check();
このようにいくつかの操作を遅らせることもできます。
setTimeout(function (){
// Something you want delayed.
}, 5000); // How long do you want the delay to be (in milliseconds)?
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);
})();
JavaScript setTimeout
name __は非常に良い解決策です。
function funcx()
{
// your code here
// break out here if needed
setTimeout(funcx, 3000);
}
funcx();
JQueryのdelay
name__関数は、主にjQueryアニメーションキューのアニメーションを遅らせるために使用されます。
es6 setTimeout
setTimeout(() => {
console.log("we waited 204586560000 ms to run this code, oh boy wowwoowee!");
}, 204586560000);
編集:204586560000 msは、元の質問とこの回答の間のおおよその時間です...私が正しく計算したと仮定すると。
delay()
はコードの流れを止めずに再実行します。 JavaScriptでこれを実行する実用的な方法はありません。他の人が言及したsetTimeout
のようなコールバックを取る関数ですべてが行われなければなりません。
JQueryのdelay()
の目的は、実行前にアニメーションキューを待機させることです。例えば$(element).delay(3000).fadeIn(250);
は3秒後に要素をフェードインさせます。
Javascriptは非同期プログラミング言語なので、しばらくの間実行を停止することはできません。実行を[疑似]停止することができる唯一の方法はsetTimeout()を使用することです。これは遅延ではなく「遅延された関数コールバック」です。
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>
次のように簡単です。
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);
}