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

如何用Anime.js实现动画反转?点击按钮恢复元素初始状态

解决Anime.js点击切换放大/还原动画的问题

嘿,我懂你卡在哪了!你现在的代码只能让div执行一次放大动画,但想要点击切换放大和还原状态对吧?其实只需要给点击事件加个状态判断,让动画能在正向(放大)和反向(还原)之间切换就好啦~

原代码的问题

你当前定义的boxGetsLarger动画只有放大的逻辑,点击按钮只会触发play()方法,没有处理还原的反向动画逻辑,所以没法回到初始状态。

解决方案:添加状态切换逻辑

我给你两种简单的实现方式,选你觉得顺手的就行:

方法1:利用Anime.js的reverse()方法

这种方法可以直接复用你原有的动画定义,只需要跟踪当前的展开状态,点击时切换动画方向:

// 保留你原有的动画定义,添加direction属性
var boxGetsLarger = anime({
  targets: '.agent-button',
  width: { value: '+=300', duration: 200, easing: 'linear' },
  borderRadius: { value: 83 },
  duration: 200,
  height: { value: '+=20' },
  easing: 'linear',
  autoplay: false,
  direction: 'normal' // 默认正向播放(放大)
});

// 用变量跟踪当前是否已展开
let isExpanded = false;

document.querySelector('.agent-button').onclick = function() {
  if (isExpanded) {
    // 如果已经展开,切换到反向动画(还原)
    boxGetsLarger.reverse();
    boxGetsLarger.play();
  } else {
    // 未展开,播放正向动画(放大)
    boxGetsLarger.play();
  }
  // 切换状态
  isExpanded = !isExpanded;
};

方法2:定义完整的双向动画片段

这种方法更直观,把放大和还原的动画都定义在一个动画实例里,通过播放不同片段来切换状态:

// 明确初始值和目标值,定义双向动画
const boxAnimation = anime({
  targets: '.agent-button',
  // 宽度:91px → 391px → 91px
  width: [
    { value: 391, duration: 200, easing: 'linear' },
    { value: 91, duration: 200, easing: 'linear' }
  ],
  // 高度:91px → 111px → 91px
  height: [
    { value: 111, duration: 200, easing: 'linear' },
    { value: 91, duration: 200, easing: 'linear' }
  ],
  // 圆角:100px → 83px → 100px
  borderRadius: [
    { value: 83, duration: 200 },
    { value: 100, duration: 200 }
  ],
  autoplay: false
});

let isExpanded = false;

document.querySelector('.agent-button').onclick = function() {
  if (!isExpanded) {
    // 播放第一段(放大)
    boxAnimation.playSegments([0, 1], true);
  } else {
    // 播放第二段(还原)
    boxAnimation.playSegments([1, 2], true);
  }
  isExpanded = !isExpanded;
};

完整代码示例

你的CSS和HTML可以保持不变,只替换JS部分就行:

<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/2.2.0/anime.min.js"></script>
<div class="agent-button close">
  <img src="img/audio-bars.svg">
</div>
.agent-button {
  display: flex;
  justify-content: space-between;
  border-radius: 100px;
  background: #ffffff;
  box-shadow: 0pt 2pt 10pt #0000001f;
  height: 91px;
  width: 91px;
}

这样点击按钮的时候,div就会在放大和初始状态之间来回切换啦~

内容的提问来源于stack exchange,提问作者maria di cesare

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:25:19