2015-06-07 68 views
4

如何在延迟后添加类然后延迟另一个类?JQuery在延迟后添加一个类然后延迟另一个类

我似乎只能添加一个。

$(document).ready(function() { 
    $(".websites-container").delay(5000).queue(function() { 
      $(this).addClass("active"); 
    }); 

    $(".websites-container").delay(8000).queue(function() { 
      $(this).addClass("gone") 
    }); 
}); 
+0

凡位于此代码?它是否在准备好的事件处理程序中? – JNYRanger

+0

对不起,你的意思是$(document).ready(function()? – MrThunder

+0

是的,这是在哪里或是否在别处?也只是为了确保我理解正确,第一个延迟事件触发, t? – JNYRanger

回答

3

您需要在.queue()回调中调用.dequeue(),否则队列中的以下项目永远不会执行。

$(document).ready(function() { 
 
    $(".websites-container").delay(1000).queue(function() { 
 
      // I'm impatient. I shortened the times. 
 
      $(this).addClass("active").dequeue(); 
 
    }).delay(2000).queue(function() { 
 
      $(this).addClass("gone"); 
 
    }); 
 
});
.active {font-weight: bold} 
 
.gone {color:red}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="websites-container">abc</div>

(这几乎被@adeneo解决,以将离队回调除外)。

+0

这对我有效。谢谢! – MrThunder

3

最有可能的问题是你正在使用jQuery的延迟功能不正确。看看参考这太问题:.delay() and .setTimeout()

因为我们没有用动画或工作中已经存在的jQuery排队,你应该在大多数情况下使用setTimeout

$(document).ready(function() { 
    window.setTimeout(function() { 
     $(".websites-container").addClass("active"); 
    }, 5000); 

    window.setTimeout(function() { 
     $(".websites-container").addClass("gone"); 
    }, 8000); 
}); 
+0

This是'.delay()'的一个有效用法。参见['.queue()'](http://api.jquery.com/queue/)获取有关排队定制函数的信息。 – Scimonster

+0

恐怕我得到一个错误在萤火虫“window.setTimeOut不是一个函数” – MrThunder

+0

@ rt840它是'setTimeout',用小写字母O. – Scimonster