JS获取CSS动画的旋转角度

CSS 动画(如 @keyframes rotate)由浏览器渲染引擎执行,JavaScript 无法直接读取动画的"当前帧"状态,但可以通过 getComputedStyle() 获取元素应用后的最终 transform 样式。该样式返回的是一个 matrix() 或 matrix3d() 函数字符串,需解析其矩阵参数来计算角度。

核心代码:

javascript 复制代码
/**
 * 获取元素的当前 CSS 旋转角度(单位:度)
 * @param {HTMLElement} element - 目标 DOM 节点
 * @returns {number} - 当前旋转角度
 */
function getCurrentRotation(element) {
  const style = window.getComputedStyle(element);
  const transform = style.getPropertyValue("transform");

  if (transform === "none") return 0;

  // 解析 matrix 字符串,例如 "matrix(0.86, 0.5, -0.5, 0.86, 0, 0)"
  const values = transform.split("(")[1].split(")")[0].split(",");
  const a = values[0];
  const b = values[1];

  // 使用 Math.atan2(b, a) 计算弧度,再转为角度
  // 公式:angle = round(atan2(b, a) * (180 / PI))
  let angle = Math.round(Math.atan2(b, a) * (180 / Math.PI));

  // 确保角度在 0-360 范围内
  return angle < 0 ? angle + 360 : angle;
}

动画截图演示:

附上codesandbox链接:
get-rotate-angle

相关推荐
里欧跑得慢15 小时前
17. Flutter Hero动画实现:让界面过渡更加优雅
前端·css·flutter·web
IT_陈寒15 小时前
Vue的这个响应式陷阱,我debug了一整天才爬出来
前端·人工智能·后端
cn_mengbei15 小时前
用React Native开发OpenHarmony应用:Reanimated共享元素过渡
javascript·react native·react.js
kyriewen15 小时前
前端测试:别为了100%覆盖率而写测试,那是自欺欺人
前端·javascript·单元测试
去伪存真15 小时前
我自己写的第一个skills--project-core-standards
前端·agent
Data_Journal16 小时前
如何使用cURL更改User Agent
大数据·服务器·前端·javascript·数据库
掌心向暖RPA自动化16 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
竹林81816 小时前
wagmi v2 多链钱包切换:一个 Uniswap 仿盘项目让我踩了三天坑
前端·javascript
donecoding16 小时前
Playwright MCP 页面捕获:Snapshot、截图、HTML 到底选哪个?
前端·ai编程·前端工程化
你也向往长安城吗16 小时前
最快的 JavaScript navmesh pathfinding3d 算法。
javascript