jQuery停止动画

jQuery停止动画,jquery,Jquery,因此,我有一个新闻条目列表,其中包含要创建、编辑或删除的AJAX控件。在其中一个操作后,顶部会显示一条小消息,确认他们所做的任何事情。因此,如果他们添加一个新帖子,就会弹出“添加新闻:标题”。它向下滑动,10秒钟后又向上滑动。问题是,如果在10秒结束之前完成多个动作,它会多次设置动画 例如: 创建标题为“一”的新闻-消息将下来 4秒后,创建标题为“两个”的新闻-消息下来 6秒钟后,“一”的消息向上滑动,然后再过4秒钟,“两”的消息向上滑动 我希望它只向上滑动一次,这样您就可以将任意多个操作排队,

因此,我有一个新闻条目列表,其中包含要创建、编辑或删除的AJAX控件。在其中一个操作后,顶部会显示一条小消息,确认他们所做的任何事情。因此,如果他们添加一个新帖子,就会弹出“添加新闻:标题”。它向下滑动,10秒钟后又向上滑动。问题是,如果在10秒结束之前完成多个动作,它会多次设置动画

例如: 创建标题为“一”的新闻-消息将下来

4秒后,创建标题为“两个”的新闻-消息下来

6秒钟后,“一”的消息向上滑动,然后再过4秒钟,“两”的消息向上滑动

我希望它只向上滑动一次,这样您就可以将任意多个操作排队,然后在最后一个操作10秒后,它向上滑动

以下是我得到的:

$('#ajax-message').html('Added News: ' + title);
$('#ajax-message').slideDown('1000').delay('10000').slideUp('1000');

听起来您在动画队列构建方面遇到了问题。您尝试过jQuery.stop()吗


为了避免这种情况,如果使用jQuery.queue()/jQuery.dequeue()函数,可能是更好的做法,也更合适:

我要做的是使用setTimeout,每次执行新操作时,清除以前的超时并创建一个新的超时

比如:

var timerID;

...
// when an action occurs
clearTimeout(timerID);
timerID=setTimeout(function(){
   $('#ajax-message').slideUp('1000');
},10000);
您可以通过检查#ajax_消息的可见性来检查它是否已打开,停止()使其不再滑动,.append()将新消息添加到当前消息,然后再次执行延迟滑动

if( $('#ajax_message').is(':hidden') )
{   
    $('#ajax_message').html('AddedNews'+title).slideDown('1000').delay('10000').slideUp('1000');
}
else
{
    //is opened
    $('#ajax_message').stop().append('<br />AddedNews'+title).delay('10000').slideUp('1000');
}
if($('ajax_message')。是('hidden'))
{   
$('ajax_message').html('AddedNews'+title.).slideDown('1000').delay('10000').slideUp('1000');
}
其他的
{
//开放
$(“#ajax_message”).stop().append(“
AddedNews”+title).delay('10000').slideUp('1000'); }
(未测试代码)

编辑:
更改了测试可见性的方式。谢谢@kingjiv

您可以发布一些有问题的代码(可能在jsfiddle.net上),以便我们能够准确地帮助您吗?会停止并取消延迟吗?我在搜索中发现了混合报告。您可以使用is(“:hidden”),而不是在css中检查显示
if($(''ajax_message').is(':hidden'))
除了不能正确地重新启动超时外,此操作有效。例如,如果我创建了一条新闻,7秒后又创建了另一条新闻,则该消息仅持续3秒。我在setTimeout中遗漏了时间参数。是的,我在中添加了该参数,但它仍然存在。我还添加了
timerID=
中缺少的内容,你也这样做了吗?对我来说很有用。看小提琴:计时器显然不是很好,但它给出了你点击的时间。每次单击按钮,它都会重置10秒等待。