2011-12-09 113 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 –