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

如何实现Font Awesome动画图标的双向状态切换功能

双向切换效果实现方案

核心改动是在点击事件中增加状态判断逻辑,同时处理动画重复触发的问题,具体实现如下:


改动要点

  • 每次点击前先移除已有的动画类,触发DOM重排后重新添加,保证每次点击都能正常触发翻转动画
  • 根据当前锁定图标的可见状态判断切换方向,实现锁和解锁的双向切换
  • 颜色切换时机仍保持在动画执行到一半的600ms,对应翻转到背向用户的时间点,视觉过渡更自然

完整实现代码

首先是CSS部分,给动画类补充固定时长,和切换逻辑匹配:

@keyframes halfflip {
  to {
    transform: rotateY(360deg);
  }
}

.fa-flip {
  animation-name: halfflip;
  animation-timing-function: ease-in-out;
  animation-duration: 1.2s; /* 新增:固定动画总时长,和600ms的半程切换对应 */
}

然后是JS逻辑替换原有代码:

$('.lock').click(function() {
  const $lock = $('.fa-lock', this);
  const $unlock = $('.fa-unlock', this);

  // 移除旧动画类,触发重排后重新添加,保证动画重复触发
  $lock.removeClass('fa-flip');
  $unlock.removeClass('fa-flip');
  void $lock[0].offsetWidth; // 触发重排,强制浏览器识别类名变更
  $lock.addClass('fa-flip');
  $unlock.addClass('fa-flip');

  setTimeout(() => {
    // 判断当前状态:锁图标为红色说明是锁定状态,切换为解锁,反之切换为锁定
    if ($lock.css('color') === 'rgb(255, 0, 0)') {
      $lock.css('color', 'transparent');
      $unlock.css('color', 'green');
    } else {
      $lock.css('color', 'red');
      $unlock.css('color', 'transparent');
    }
  }, 600);
});

HTML部分可以直接复用原有代码无需修改。


内容的提问来源于stack exchange,提问作者Three Year Old

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:24:06