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

如何实现每次点击事件触发时重新运行JavaScript动画函数?

解决CSS动画点击无法重复触发的问题

你的代码目前只能执行一次动画,原因是设置forwards后,动画结束会保持最后一帧状态,再次点击时浏览器会判定动画已完成,不会重新触发。要实现每次点击都重启动画,需要先重置动画状态,再重新触发:

修改后的代码

CSS 部分

#myDiv {
  animation: none;
}

/* 必须定义对应的关键帧动画(示例为位移动画,可根据需求修改) */
@keyframes animation {
  from { transform: translateX(0); }
  to { transform: translateX(200px); }
}

JavaScript 部分

function myFun() {
  const div = document.getElementById('myDiv');
  
  // 重置动画状态
  div.style.animation = 'none';
  
  // 强制浏览器触发重绘,确保重置操作生效
  void div.offsetWidth;
  
  // 重新启动动画
  div.style.animation = 'animation 1s forwards';
}

原理说明

  • 先将animation设为none,清除当前动画的执行状态;
  • 调用void div.offsetWidth会强制浏览器重新计算元素布局并触发重绘,避免浏览器因优化忽略后续的动画设置;
  • 最后重新设置动画参数,此时浏览器会判定为新的动画触发,从而从头执行动画。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:15:37