.delay
jQueryでメソッドを機能させることができません。
$.delay(3000); // not working
$(queue).delay(3000); // not working
私は、whileループを使用して、制御されていない変更値が別の値以上になるまで待機し、X秒間実行を停止する方法を見つけることができません。
.delay
jQueryでメソッドを機能させることができません。
$.delay(3000); // not working
$(queue).delay(3000); // not working
私は、whileループを使用して、制御されていない変更値が別の値以上になるまで待機し、X秒間実行を停止する方法を見つけることができません。
回答:
$ .delayは、実行を停止するのではなく、キュー内のアニメーションを遅延させるために使用されます。
whileループを使用する代わりに、次を使用して1秒ごとにチェックを実行するメソッドを再帰的に呼び出す必要がありますsetTimeout
。
var check = function(){
if(condition){
// run when condition is met
}
else {
setTimeout(check, 1000); // check again in a second
}
}
check();
setTimeout()
。
次のように操作を遅らせることもできます。
setTimeout(function (){
// Something you want delayed.
}, 5000); // How long do you want the delay to be (in milliseconds)?
jQueryのdelay
関数は、エフェクトとエフェクトキューで使用するためのものです。delay
ドキュメントとその中の例を参照してください。
$('#foo').slideUp(300).delay(800).fadeIn(400);
変数の変化を観察したい場合は、次のようにすることができます
(function() {
var observerInterval = setInterval(function() {
if (/* check for changes here */) {
clearInterval(observerInterval);
// do something here
}
}, 1000);
})();
delay()
コードの流れを停止してから再実行しません。JavaScriptでこれを行う実用的な方法はありません。setTimeout
他の人が言及したようなコールバックを取る関数ですべてを行う必要があります。
jQueryの目的は、delay()
実行前にアニメーションキューを待機させることです。たとえば$(element).delay(3000).fadeIn(250);
、3秒後に要素がフェードインします。
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>
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
}