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

如何通过jQuery重置CSS Animation状态,使其每次触发都能重新执行?

实现CSS动画状态重置的jQuery方案

要解决点击按钮时重置闪烁动画的问题,核心是让浏览器重新触发CSS动画。因为CSS动画在元素持有对应类名时只会执行一次,直接替换状态类不会让动画重新启动,必须先移除动画类,再重新添加(中间需要让浏览器完成重绘)。

修改后的实现代码

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<span id="animate">I am going to get animated!</span>
<div>
  <p style="margin-bottom:5px">These buttons are acting as response</p>
  <button id="true">True</button>
  <button id="false">False</button>
</div>

CSS

@-webkit-keyframes flash {
  0%, to {
    opacity: 1;
  }
  50% {
    opacity: 0;
  }
}

@keyframes flash {
  0%, to {
    opacity: 1;
  }
  50% {
    opacity: 0;
  }
}

.flashit {
  -webkit-animation: flash linear 1s 3;
  -moz-animation: flash linear 1s 3;
  animation: flash linear 1s 3;
}

.true {
  color: green;
}

.false {
  color: red;
}

注:原CSS的flash动画缺少中间过渡帧,这里补充了50%阶段的opacity:0,让闪烁效果可见

jQuery代码

$("#true").click(function() {
  resetAnimation('true');
  console.log("True clicked");
});

$("#false").click(function() {
  resetAnimation('false');
  console.log("False clicked");
});

function resetAnimation(targetClass) {
  const $el = $('#animate');
  // 移除所有状态类和动画类
  $el.removeClass('true false flashit');
  // 触发浏览器重绘,确保类移除操作生效
  void $el.get(0).offsetWidth;
  // 添加目标状态类和动画类,重新启动动画
  $el.addClass(`${targetClass} flashit`);
}

核心原理

  • 移除类名:先把所有相关的状态类(true/false)和动画类(flashit)都移除,让元素回到初始状态
  • 触发重绘:通过访问元素的offsetWidth属性,强制浏览器立即处理DOM变化,避免类的移除和添加被合并执行
  • 重新添加类:添加目标状态类和动画类,此时浏览器会重新识别动画,让闪烁效果从头开始执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:06:21