在我之前停止(或slideDown()
)之后,如何让slideUp()
动画继续播放?我认为它不会这样做,这与slideDown()
仅对最初隐藏的元素起作用的事实有关。而且这些动画中的元素并没有被隐藏。
有没有办法规避这种行为,让jQuery在停止后继续动画? (编辑:或者如果您知道使用slideDown()
的替代解决方案;当然也会这样做)
请同时查看my jsfiddle example,了解我正在尝试做什么。
至于一些背景资料:
我想为表单验证消息实现此行为。我单独将它们向下滑动,经过一段时间后再将它们向上滑动。但是,如果用户重新提交表单比消息消失更快并且某些“新”消息已经存在并且尚未完成动画(向上或向下滑动),我想再次将它们向下滑动。
答案 0 :(得分:1)
指出slideDown
中.data()
是否已完成。如果由于stop
功能未完成,hide
和slideDown
再次完成。
请参阅 DEMO 。
$( 'div' ).hide().slideDown(1000, function() {
$(this).data("completed", "completed");
});
setTimeout( function() {
$( 'div' ).stop( true );
}, 500 );
setTimeout( function() {
if ($('div').data("completed") !== "completed") {
$( 'div' ).hide().slideDown();
}
}, 2000 );
答案 1 :(得分:0)
您要做的是在动画之前使用.stop(),例如
$('#element').stop().slideUp();
查看jQuery的示例
如果您需要更多帮助或澄清,请告知我们。)
答案 2 :(得分:0)
类似于this?
$( 'div' ).hide().slideDown( 1000 );
setTimeout( function() {
$( 'div' ).stop( true );
$( 'div' ).hide().slideDown(1000);
}, 500 );
对于中途的slideUp()
,请移除hide()
$( 'div' ).hide().slideDown( 1000 );
setTimeout( function() {
$( 'div' ).stop( true );
$( 'div' ).slideUp(1000);
}, 500 );