为什么我不能对同一元素的两个不同事件使用 slideUp()?
Why can't I use slideUp() for two different events for the same element?
我有这个会话消息:
<div class="alert alert-success session-message text-center">
Hi
<a href="#" class="pull-right close-message">×</a>
</div>
我有这个 jQuery 代码:
$(function(){
$('.close-message').click(function(){
$('.session-message').slideUp();
});
$('.session-message').delay(2000).slideUp();
});
就此代码而言,当我单击 × 按钮时,消息不会 slideUp
。但是,如果我注释掉延迟部分,单击 × 会执行我想要的操作:
$(function(){
$('.close-message').click(function(){
$('.session-message').slideUp();
});
// $('.session-message').delay(2000).slideUp();
});
此外,如果我将点击动画从 slideUp()
更改为其他任何内容,例如 fadeOut()
,它仍然不起作用。但是,如果我将其更改为 hide()
之类的内容,它确实有效。
我做错了什么?我该怎么做才能单击 slideUp()
消息或等待它在 2 秒后 slideUp()
?
您应该使用 .stop()
因为您已经为 DOM 上的元素注册了动画队列 ready.
$(function(){
$('.close-message').click(function(){
// without the .stop(), it will wait until the first animation in queue is done
$('.session-message').stop().slideUp();
});
// registered animation queue for the element on DOM ready:
$('.session-message').delay(2000).slideUp();
});
$('.close-message').click(function(){
$('.session-message').stop().slideUp();
});
$('.session-message').delay(2000).slideUp();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="alert alert-success session-message text-center">
Hi
<a href="#" class="pull-right close-message">×</a>
</div>
(...) But if I change it to something like hide()
, it does work
因为 .hide()
不是动画,因此不在动画队列中。
我有这个会话消息:
<div class="alert alert-success session-message text-center">
Hi
<a href="#" class="pull-right close-message">×</a>
</div>
我有这个 jQuery 代码:
$(function(){
$('.close-message').click(function(){
$('.session-message').slideUp();
});
$('.session-message').delay(2000).slideUp();
});
就此代码而言,当我单击 × 按钮时,消息不会 slideUp
。但是,如果我注释掉延迟部分,单击 × 会执行我想要的操作:
$(function(){
$('.close-message').click(function(){
$('.session-message').slideUp();
});
// $('.session-message').delay(2000).slideUp();
});
此外,如果我将点击动画从 slideUp()
更改为其他任何内容,例如 fadeOut()
,它仍然不起作用。但是,如果我将其更改为 hide()
之类的内容,它确实有效。
我做错了什么?我该怎么做才能单击 slideUp()
消息或等待它在 2 秒后 slideUp()
?
您应该使用 .stop()
因为您已经为 DOM 上的元素注册了动画队列 ready.
$(function(){
$('.close-message').click(function(){
// without the .stop(), it will wait until the first animation in queue is done
$('.session-message').stop().slideUp();
});
// registered animation queue for the element on DOM ready:
$('.session-message').delay(2000).slideUp();
});
$('.close-message').click(function(){
$('.session-message').stop().slideUp();
});
$('.session-message').delay(2000).slideUp();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="alert alert-success session-message text-center">
Hi
<a href="#" class="pull-right close-message">×</a>
</div>
(...) But if I change it to something like
hide()
, it does work
因为 .hide()
不是动画,因此不在动画队列中。