.delay()
のjQueryドキュメントによると、
.delay()メソッドは、キューに入れられたjQuery効果間の遅延に最適です。これは制限されているため(たとえば、遅延をキャンセルする方法を提供していません)、. delay()は、JavaScriptのネイティブのsetTimeout関数に代わるものではありません。
誰かがこれを拡張してくれませんか?いつ.delay()
を使用する方が適切であり、いつ.setTimeout()
を使用する方が適切ですか?
あなたが投稿したものは本当にそれを説明していると思います。
アニメーションを含むjQuery効果には.delay()
を使用します。
setTimeout()
は、その他すべてに最適です。たとえば、特定の経過時間にイベントをトリガーする必要がある場合。
私が理解している限り、.delay()
は、特定のjQueryキュー内のメソッド間に遅延を追加することを特に目的としています。たとえば、1秒間に画像をフェードインして5秒間表示し、さらに1秒間かけて画像を再びフェードアウトしたい場合は、次のようにします。
_$('#image').fadeIn(1000).delay(5000).fadeOut(1000);
_
このインスタンスでは、.delay()
は、特定のjQueryキューでイベントを遅延させるために特別に意図されているため、より直感的に使用できます。一方、setImeout()
はネイティブJavaScriptメソッドであり、キュー行を明示的に意図したものではありません。ボタンをクリックしてから1秒後にアラートボックスをポップアップさせるには、次のようにします。
_function delayAlert() {
var x = setTimeout("alert('5 seconds later!')", 5000);
}
<input type="submit" value="Delay!" onclick="delayAlert();" />
_
.delay()
は、ほとんどの場合、間に一時停止があるアニメーション効果を一緒にチェーンするために使用されます。
ドキュメントが言及するように、遅延をキャンセルする方法はありません。遅延をキャンセルしたい場合は、代わりにsetTimeout()
を使用して、clearTimeout()
でキャンセルできるようにします。
たとえば、アニメーションでdelay
を使用できます。
$('.message').delay(5000).fadeOut();
timeOut
を使用して、アニメーションの開始を遅らせることもできます。次に例を示します。
window.setTimeout(function(){
$('.message').fadeOut();
}, 5000);
ご覧のとおり、アニメーションではdelay
よりもsetTimeout
を使用する方が簡単です。
setTimeout
を使用すると、ほとんど何でも遅延できますが、アニメーションを遅延できるのはdelay
のみです。アニメーションではないメソッドはdelay
の影響を受けないため、要素を非表示にする前にしばらく待機せず、すぐに非表示にします。
$('.message').delay(5000).hide();
Delay()のもう1つの副作用:遅延が終わるまで、遅延しているオブジェクトを非表示にする(またはフェードアウトするなど)機能が無効になるようです。
たとえば、次のコードを設定して(おそらく、stackoverflow開発者がcss名を認識します...)、「div」を非表示にします。
$j(document).ready(function(){
var $messageDiv = $j("<div>").addClass('fading_message')
.text("my alert message here").hide();
var $closeSpan = $j("<span>").addClass('notify_close').text("x");
$closeSpan.click(function() {$j(this).parent().slideUp(400);});
$messageDiv.append($closeSpan);
$j('.content_wrapper_div').prepend($messageDiv);
$messageDiv.fadeTo(500, .9).delay(5000).fadeTo(800,0);
});
スパン(「div」にある)にある「x」をクリックすると、クリック機能が起動しました(そこで警告をテストしました)が、divは指示どおりにSlideUpしませんでした。しかし、私が最後の行をこれで置き換えると:
$messageDiv.fadeTo(500, .9);
..その後、機能しました。「x」をクリックすると、周囲のdivがSlideUpになり、離れます。 $ messageDivの "delay()"関数のバックグラウンド実行がそのオブジェクトを "ロック"しているように思われるため、それを閉じることを試みる別のメカニズムは、遅延が完了するまでそれを行うことができませんでした。