我可以在jQuery中的'click'和'addClass'之间添加延迟吗?

时间:2013-08-23 14:51:44

标签: javascript jquery html css

我可以在addClass方法之前添加延迟吗?

这似乎对我不起作用。

$("#btn").click(function doStuff(){
    $("#myoBj").show();
    $("#myoBj").animate({left: "15"});
    $(".secondObj").delay(1000).addClass('glow');
    $(".thirdObj").addClass('topGlow');
)};

由于

4 个答案:

答案 0 :(得分:3)

来自the documentation

  

.delay()方法最适合在排队的jQuery之间延迟   效果。因为它是有限的 - 例如,它并没有提供一种方法   取消延迟 - .delay()不能替代JavaScript的原生代码   setTimeout功能,可能更适合某些用途   例。

因此,.delay()不能代替JavaScript的setTimeout()


使用此:

$("#btn").click(function doStuff(){
    $("#myoBj").show();
    $("#myoBj").animate({left: "15"});
    setTimeout(function(){ $(".secondObj").addClass('glow'); }, 1000);
    $(".thirdObj").addClass('topGlow');
)};

答案 1 :(得分:1)

是的,但没有使用jQuery delay函数,因为动作需要在动画队列上(或“动画队列,如果你定义一个动画队列”)才能工作;改为使用setTimeout

setTimeout(function() { /* */ }, timeout);

答案 2 :(得分:1)

$("#btn").click(function doStuff(){
    $("#myoBj").show();
    $("#myoBj").animate({left: "15"});

    setTimeout(function () {
        // Wait 1 second and add the class
        $(".secondObj").addClass('glow');
    }, 1000);

    $(".thirdObj").addClass('topGlow');
});

答案 3 :(得分:0)

您可以使用queue()方法的回调在延迟完成后触发代码。

$("#btn").click(function doStuff(){
    $("#myoBj").show();
    $("#myoBj").animate({left: "15"});
    $(".secondObj").delay(1000).queue(function() {
          $(this).addClass('glow');
    });
    $(".thirdObj").addClass('topGlow');
)};