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

jQuery点击事件:如何实现点击后依次执行多个动画函数?

问题描述

我有一个页面,希望通过按钮滑动一个会覆盖下层内容的元素,完成该操作后,在露出的区域执行另一项动画,且所有操作需适配屏幕尺寸。

目前遇到的问题是:点击触发的覆盖层动画与下层元素动画会同时执行;若使用delay方法,第二个动画会独立于点击事件触发。请问如何修改以下代码,实现点击后先执行第一个动画,完成后再执行第二个动画?

else {
$("#lock").click(function(){
    opener();
});
  $(function animation(){
    $(".territory").delay(3000).animate({
              width: "100vw"
          }), "slow";
    $(".territory").animate({
              height: "100vh"
          });
  });
}
解决方案

核心问题是原代码的动画逻辑脱离了点击事件的控制,且delay()是全局延迟,和点击动作解绑。要实现点击后按顺序执行动画,需把动画逻辑放到点击回调内,利用jQuery动画的完成回调函数串联两个动画。

修改后的代码如下:

else {
  $("#lock").click(function(){
    opener(); // 先执行opener操作
    // 第一个宽度动画,完成后触发回调里的高度动画
    $(".territory").animate({
      width: "100vw"
    }, "slow", function() {
      // 第一个动画完全结束后,执行第二个高度动画
      $(".territory").animate({
        height: "100vh"
      });
    });
  });
}

关键修改说明:

  • 把原本独立的动画逻辑移入#lock的点击回调,确保动画由点击动作触发,而非页面加载后自动执行。
  • 移除delay(3000),改用动画的第三个参数(回调函数)——这个函数只会在第一个动画彻底完成后才执行,完美实现顺序触发。
  • 修正了原代码的语法错误:animate({...}), "slow"的括号位置错误,正确写法是animate({目标样式}, 时长, 完成回调)。

这样修改后,点击按钮会先执行opener(),接着完成宽度动画,最后触发高度动画,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:09:21