2011-12-09 109 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"); 
    } 
); 

您可以將您的類,如removeClass("door doorstatic")

這裏的問題是,如果你鼠標懸停和前2秒鐘的鼠標你依然會對類doorstatic你的元素。

的修復:

$("#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"); 
    } 
); 

創建在jsFiddle溶液的實況實例。

+0

即使您選擇在2秒鐘之前移除鼠標(鼠標離開),懸停後(鼠標進入)2秒鐘後,「門禁」級別可能會被添加。 – Stefan

+0

但是我有幾個..我有一個基本的日曆和有一排箱子。用戶可以使用鼠標和流過很多......有不止一個盒子旁邊頁EAC等.. – TheBlackBenzKid

+0

尼斯!真像數據的使用'()'和''||操作者:) – Stefan

2

javascript的setTimeout方法可用於運行您在指定延遲毫秒後指定的代碼。

試試這個:

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'不接受使用第二個字符串參數,如「慢」。 – Stefan

+0

@Stefan謝謝,忘記刪除。 –

2

其實你可以追加到jQuery's delay打電話給你addClass電話。

喜歡的東西

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

應該做的伎倆。

+0

的解決方案有一個在addClass法沒有第二個參數。我不認爲延遲會在那裏發揮作用。 – OptimusCrime

+1

@OptimusCrime〜jQuery UI擴展了'.addClass()'方法(以及其他一些方法)來支持動畫。 http://docs.jquery.com/UI/Effects/addClass –