You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何等待slideUp与animate动画全部完成后再执行后续代码

首先修正你现有代码的写法问题:你将duration: 'fast'写在了animate的CSS属性参数对象内,这是无效的——jQuery会尝试对不存在的durationCSS属性做动画,不会将其识别为动画时长配置。animate的时长参数需要放在属性对象之后,或是写到独立的配置对象里。

要等slideUp和animate两个动画全部执行完成后再运行后续代码,有两种成熟的实现方式:

方法1:使用动画队列Promise(推荐,适配串行/并行动画场景)

jQuery的动画队列自带Promise支持,调用.promise()后会在当前元素所有关联动画全部执行完成后触发done回调,不管动画是串行执行还是并行执行都能正确等待:

$('#something')
  .slideUp('fast')
  .animate({ opacity: 0 }, 'fast') // 修正duration参数位置
  .promise()
  .done(function() {
    // 此处写两个动画全部完成后要执行的逻辑
  });

如果你希望两个动画同时并行执行(默认是先执行slideUp、再执行透明度动画的串行逻辑),可以给animate加queue: false配置,Promise依然能正确等待两个动画全部结束:

$('#something')
  .slideUp('fast')
  .animate({ opacity: 0 }, {
    duration: 'fast',
    queue: false // 不进入默认动画队列,和slideUp同时启动
  })
  .promise()
  .done(function() {
    // 两个并行动画全部结束后才会执行这里
  });

方法2:给最后一个动画传完成回调(简单场景适用)

jQuery默认动画是按调用顺序串行排队执行的,因此直接把回调作为最后一个animate方法的完成参数传入即可,等最后一个动画跑完时,前面的slideUp必然已经执行完成:

$('#something').slideUp('fast').animate(
  { opacity: 0 },
  'fast',
  function() {
    // 此处写两个动画全部完成后要执行的逻辑
  }
);

注意这种写法只适用于动画串行执行的场景,如果给animate加了queue: false让动画并行,回调只会等animate执行完就触发,不会等待还在运行的slideUp。

内容的提问来源于stack exchange,提问作者arresteddevelopment

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.06 16:15:43