189

次のような単純なもの:

$("#div").addClass("error").delay(1000).removeClass("error");

動作しないようです。最も簡単な代替手段は何でしょうか?

4

10 に答える 10

386

新しいキューアイテムを作成して、クラスを削除できます。

$("#div").addClass("error").delay(1000).queue(function(next){
    $(this).removeClass("error");
    next();
});

または、デキュー方式を使用します。

$("#div").addClass("error").delay(1000).queue(function(){
    $(this).removeClass("error").dequeue();
});

nextまたはを呼び出す必要がある理由dequeueは、このキューに入れられたアイテムが完了し、次のアイテムに移動する必要があることをjQueryに通知するためです。

于 2010-03-24T18:05:29.097 に答える
51

AFAIK遅延メソッドは、数値のCSS変更に対してのみ機能します。

他の目的のために、JavaScriptにはsetTimeoutメソッドが付属しています。

window.setTimeout(function(){$("#div").removeClass("error");}, 1000);
于 2010-03-24T17:52:53.350 に答える
11

これは非常に古い投稿であることは知っていますが、いくつかの回答を組み合わせて、チェーンをサポートするjQueryラッパー関数を作成しました。それが誰かに利益をもたらすことを願っています:

$.fn.queueAddClass = function(className) {
    this.queue('fx', function(next) {
        $(this).addClass(className);
        next();
    });
    return this;
};

そして、これがremoveClassラッパーです。

$.fn.queueRemoveClass = function(className) {
    this.queue('fx', function(next) {
        $(this).removeClass(className);
        next();
    });
    return this;
};

今、あなたはこのようなことをすることができます-1秒待って、追加して.error、3秒待って、削除して.errorください:

$('#div').delay(1000).queueAddClass('error').delay(2000).queueRemoveClass('error');

于 2016-08-17T01:31:26.907 に答える
6

jQueryのCSS操作はキューに入れられませんが、次のようにして「fx」キュー内で実行させることができます。

$('#div').delay(1000).queue('fx', function() { $(this).removeClass('error'); });

setTimeoutを呼び出すのとまったく同じですが、代わりにjQueryのキューメカニズムを使用します。

于 2014-12-23T15:23:35.960 に答える
4

もちろん、次のようにjQueryを拡張すると、より簡単になります。

$.fn.addClassDelay = function(className,delay) {
    var $addClassDelayElement = $(this), $addClassName = className;
    $addClassDelayElement.addClass($addClassName);
    setTimeout(function(){
        $addClassDelayElement.removeClass($addClassName);
    },delay);
};

その後、addClassのようにこの関数を使用できます。

$('div').addClassDelay('clicked',1000);
于 2016-05-11T21:20:12.517 に答える
2

遅延はキューで動作します。そして、私が知る限り、css操作(アニメーション以外)はキューに入れられません。

于 2010-03-24T17:50:35.947 に答える
2

delaynoneキュー関数では機能しないため、を使用する必要がありますsetTimeout()

そして、あなたは物事を分離する必要はありません。あなたがする必要があるのは、setTimeOutメソッドにすべてを含めることです:

setTimeout(function () {
    $("#div").addClass("error").delay(1000).removeClass("error");
}, 1000);
于 2018-05-30T05:19:07.507 に答える
0

これを試して:

function removeClassDelayed(jqObj, c, to) {    
    setTimeout(function() { jqObj.removeClass(c); }, to);
}
removeClassDelayed($("#div"), "error", 1000);
于 2011-01-03T09:29:40.903 に答える
0

この単純な矢印機能を試してください:

setTimeout( () => { $("#div").addClass("error") }, 900 );

于 2019-09-18T07:37:38.127 に答える
-1
$("#div").addClass("error").show(0).delay(1000).removeClass("error");

後でありがとう。

于 2021-03-26T06:03:12.393 に答える