4

私が知りたいのは、一定時間後に実行する jQuery 関数をキューに入れる良い方法があるかどうかです。これは、他の関数の実行を一時停止するのではなく、チェーン内の次の関数だけを一時停止します。おそらく、私が想像している例は次のようになります。

$('#alert')
    .show()
    .wait(5000)    // <-- this bit
    .hide()
;

タイムアウトを使用することでそれが可能であることは知っていますが、特に上記の例と比較すると(実際の場合)、面倒な方法のようです。

それで、このようなものはすでにjQueryに組み込まれていますか?そうでない場合、それをエミュレートする最良の方法は何ですか?

4

2 に答える 2

8

あなたはそれをすることはできませんし、おそらくしたくないでしょう。確かにきれいに見えますが、時間が経過するまで「待機」するだけでそれを行うことができるメカニズムは Javascript にはありません。確かにそれを行うことはできますが、ブラウザのパフォーマンスが大幅に低下するリスクがあり、タイムアウトが数秒より長い場合、ブラウザは JavaScript がスタックしているように見えるという警告をユーザーに表示します。

これを行う正しい方法は、タイムアウトを使用することです。

var el = $('#alert');
el.show()
setTimeout(function() { el.hide() }, 5000);

他のオプションは、jquery を拡張して、遅延させたいアクションの効果を本質的に追加することです。

jQuery.fn.extend({
    delayedHide: function(time) {
        var self = this;
        setTimeout(function() { self.hide(); }, time);
    }
});

$('#alert')
    .show()
    .delayedHide(5000)
;

setTimeout と同様のメソッドで jquery を拡張することもできます。

jQuery.fn.extend({
    delayThis: function(fn, time, args) {
        var self = this;
        setTimeout(function() { jQuery.fn[fn].apply(self, args); }, time);
    }
});

$('#alert')
    .show()
    .delayThis('hide', 5000)
;

または args を使用して呼び出すには、引数を配列で渡します。

$('#alert')
    .show()
    .delayThis('css', 5000, [ 'display', 'none' ])
;
于 2008-09-18T01:02:23.460 に答える
1

jQuery FxQueues プラグインは、必要なことだけを行います。

$('#element').fadeOut({
    speed: 'fast',
    preDelay: 5000
});
于 2008-09-18T03:38:54.283 に答える