微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – JQuery链接动作,工作..但CSS不等待轮到你了?

所以我有类似的东西(下图),一切都依次工作(它在开始时隐藏,然后你看到它向下滑动,等待2秒,并向后滑动)但是.css动作立即发生,即使它是在2秒延迟.只是想知道为什么会这样.

$('p:first')
   .hide()
   .slideDown('slow')
   .delay(2000)
   .css({"background-color":"#ff4"})
   .slideUp('slow')
});

编辑新代码:我已将代码更改为:这似乎不再是slideUp ..(因为我希望它在向上滑动之前变为黄色)

   $('p:first')
.hide()
.slideDown('slow')
.delay(2000,function(){
                $(this).css({"background-color": "#ff4"})
                })
.slideUp('slow')
});
最佳答案
那是因为delay()只会影响动画队列.方法链接在前一个调用返回后立即发生,因此css()(这不是动画)最终会被过早调用.

您可以将回调函数传递给slideUp(),并在动画完成时调用它:

$("p:first").hide()
            .slideDown("slow")
            .delay(2000)
            .slideUp("slow",function() {
                $(this).css("background-color","#ff4");
            });

编辑:您正试图在第二个代码片段中将回调传递给delay(),但该方法并不正式支持这样的参数(尽管如此,它仍会被调用,这很有趣).但是,正如您所见,这样做会破坏动画回调链,因为从不调用slideUp().

在这种情况下,您可以使用适当命名的queue()dequeue()方法在动画队列中注入自己的函数

$("p:first").hide()
            .slideDown("slow")
            .delay(2000)
            .queue(function() {
                $(this).css("background-color","#ff4")
                       .dequeue();
            }).slideUp("slow");

原文地址:https://www.jb51.cc/jquery/428552.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐