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

相关推荐
Revolution6136 分钟前
React 组件重新渲染时,到底重新执行了什么
前端·react.js·面试
林焱_RPAAI40 分钟前
影刀RPA操作数据库进阶:事务处理与批量写入优化
css
用户2181697049302 小时前
Flutter(四)Dart语法 空安全 运算符 流程控制
前端
许彰午2 小时前
政务督办的分合模式:主办协办的并发审批
前端·javascript·政务
用户69371750013842 小时前
AI时代,程序员该往哪走?
前端·后端
ttwuai2 小时前
GoFrame 后台日志清空失败:无 WHERE 删除为什么被拦住
前端·golang
易筋紫容2 小时前
创建型模式:对象的诞生艺术
开发语言·前端·javascript
半句唐诗3 小时前
我是如何通过 Access Token 成功发布第一个 npm 包的
前端·npm·node.js
程序员黑豆3 小时前
鸿蒙应用开发:@Provider 与 @Consumer 跨组件双向同步详解
前端·harmonyos
paopaokaka_luck3 小时前
基于springboot3+vue3的智能文库平台(AI智能搜索、AI智能汇总、实时在线状态展示、多格式文档预览与富文本编辑、Echarts图形化分析)
前端·网络·spring boot·网络协议·echarts