中途停止后继续slideDown()?

时间:2013-02-08 06:37:54

标签: jquery jquery-animate slidedown

在我之前停止(或slideDown())之后,如何让slideUp()动画继续播放?我认为它不会这样做,这与slideDown()仅对最初隐藏的元素起作用的事实有关。而且这些动画中的元素并没有被隐藏。

有没有办法规避这种行为,让jQuery在停止后继续动画? (编辑:或者如果您知道使用slideDown()的替代解决方案;当然也会这样做)

请同时查看my jsfiddle example,了解我正在尝试做什么。


至于一些背景资料:
我想为表单验证消息实现此行为。我单独将它们向下滑动,经过一段时间后再将它们向上滑动。但是,如果用户重新提交表单比消息消失更快并且某些“新”消息已经存在并且尚未完成动画(向上或向下滑动),我想再次将它们向下滑动。

3 个答案:

答案 0 :(得分:1)

指出slideDown.data()是否已完成。如果由于stop功能未完成,hideslideDown再次完成。

请参阅 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();

http://api.jquery.com/stop/

查看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 );