2011-12-09 11 views
4

addClass();でイージングまたはタイムディレイを使用するにはどうすればよいですか?ジャバスクリプトのホバー()で2秒間クラスを追加する遅延

$("#date_1").hover(
    function() { 
     $(this).addClass("door"); 
     $(this).addClass("doorstatic", "slow"); // after 2seconds i want to add this class during the hover 
    }, 
    function() { 
     $(this).removeClass("door"); 
     $(this).removeClass("doorstatic"); // both classes are instantly removed when hover off 
    } 
); 

答えて

10
$("#date_1").hover( 
    function() { 
     var $this = $(this); 

     $this.addClass("door"); 
     setTimeout(function() { 
      $this.addClass("doorstatic"); 
     }, 2000); // 2000 is in mil sec eq to 2 sec. 
    }, 
    function() { 
     $(this).removeClass("door doorstatic"); 
    } 
); 

をあなたの要素。

修正:jsFiddleで溶液の実際の例を作成しまし

$("#date_1").hover( 
    function() { 
     var $this = $(this), 
      timer = $this.data("timer") || 0; 

     clearTimeout(timer); 
     $this.addClass("door"); 

     timer = setTimeout(function() { 
      $this.addClass("doorstatic"); 
     }, 2000); // 2000 is in mil sec eq to 2 sec. 

     $this.data("timer", timer); 
    }, 
    function() { 
     var $this = $(this), 
      timer = $this.data("timer") || 0; 

     clearTimeout(timer); 
     $this.removeClass("door doorstatic"); 
    } 
); 

+0

2秒前にマウスを離しても(マウスを離しても)、マウスを置いてから2秒後に「ドア」クラスが追加される可能性があります。 – Stefan

+0

しかし、私はいくつか..私はカレンダーを基本的に持っていて、行にボックスがあります..ユーザーはマウスを使用し、多くの上に流れます...ページの他のeac他の隣に複数のボックスがあります.. – TheBlackBenzKid

+0

ニース! 'data()'と '||'演算子の使用が本当に好きです。 – Stefan

2

setTimeout方法は、あなたがミリ秒で設定された遅延の後に指定したコードを実行するために使用することができます。

この試してみてください:あなたがここでの問題は、あなたがマウスをマウスオーバーし、2秒前にあれば、あなたはまだ上のクラスdoorstaticを持っているということですremoveClass("door doorstatic")

のようなグループにクラスをすることができます

var timeout; 
$("#date_1").hover(
    function() { 
     $(this).addClass("door"); 
     timeout = setTimeout(function() { $(this).addClass("doorstatic"); }, 2000); 
    }, function() { 
     clearTimeout(timeout); 
     $(this).removeClass("door doorstatic"); 
    } 
); 
+1

「addClass」は「遅い」のような2番目の文字列引数を受け入れません。 – Stefan

+0

@Stefanありがとう、忘れてしまった。 –

2

実際にはjQuery's delayへのコールをaddClassコールに追加することができます。

$(this).addClass("door").delay(2000).addClass("doorstatic", "slow"); 

よう

何かがトリックを行う必要があります。

+0

addClassメソッドに第2引数はありません。そして私は遅れがそこで働くとは思わない。 – OptimusCrime

+1

@OptimusCrime〜jQuery UIは、アニメーションをサポートするために(いくつかの他にも) '.addClass()'メソッドを拡張しています。 http://docs.jquery.com/UI/Effects/addClass –

関連する問題