
本文介绍如何在不依赖 javascript 的前提下,使用原生 svg `
要实现 SVG 路径围绕统一中心点以不同速度独立旋转,核心在于:将 <animateTransform> 直接嵌入对应 <g> 或 <path> 容器中,并通过 from 和 to 属性明确定义旋转中心坐标。SVG 的 rotate(angle cx cy) 变换默认以视图坐标系原点为基准,但指定 cx 和 cy(如 80 80)即可将旋转锚点精准锁定在画布中心或任意预设位置。
以下是一个完整、可直接运行的示例(已适配您提供的路径数据):
<svg width="160" height="160" viewBox="0 0 160 160" xmlns="http://www.w3.org/2000/svg">
<!-- 第一组路径:1秒完成一圈旋转 -->
<g id="first">
<path id="path1" fill="#ed1c24" opacity="1" d="M 7.01 7.01 C 104.67 6.99 202.33 6.99 299.99 7.01 C 300.01 104.67 300.01 202.33 299.99 299.99 C 202.33 300.00 104.67 300.01 7.01 299.99 C 7.00 202.33 6.99 104.67 7.01 7.01 M 33.01 32.01 C 32.99 113.67 32.99 195.33 33.01 276.99 C 114.00 277.01 195.00 277.01 275.99 276.99 C 276.01 195.33 276.00 113.67 275.99 32.01 C 195.00 31.99 114.00 31.99 33.01 32.01 Z" />
<animateTransform
attributeName="transform"
type="rotate"
from="0 80 80"
to="360 80 80"
begin="0s"
dur="1.0s"
repeatCount="indefinite" />
</g>
<!-- 第二组路径:3秒完成一圈旋转 -->
<g id="second">
<path id="path2" fill="#000000" opacity="1" d="M 153.11 60.95 C 153.80 60.95 155.19 60.95 155.89 60.95 C 164.16 84.01 170.90 107.63 178.27 131.00 C 193.87 131.15 209.34 132.65 225.03 131.99 C 231.77 133.78 238.79 132.61 245.68 133.11 C 247.47 134.01 247.60 136.84 245.75 137.75 C 228.10 151.08 210.95 165.34 193.10 178.24 C 200.20 200.70 205.97 223.63 212.89 246.17 C 213.90 248.26 211.70 251.09 209.51 249.75 C 191.40 237.05 173.47 224.11 155.49 211.23 C 154.51 210.75 153.61 210.91 152.79 211.69 C 135.34 224.34 117.79 236.83 100.20 249.29 C 98.13 251.48 94.85 248.71 96.11 246.17 C 103.03 223.63 108.79 200.70 115.90 178.24 C 98.05 165.34 80.90 151.08 63.25 137.75 C 61.40 136.84 61.52 134.01 63.32 133.12 C 70.21 132.61 77.23 133.78 83.97 131.99 C 99.66 132.65 115.13 131.15 130.73 131.00 C 138.19 107.66 144.91 84.03 153.11 60.95 Z" />
<animateTransform
attributeName="transform"
type="rotate"
from="0 80 80"
to="360 80 80"
begin="0s"
dur="3.0s"
repeatCount="indefinite" />
</g>
</svg>✅ 关键要点说明:
- from="0 80 80" 和 to="360 80 80" 中的 80 80 是旋转中心的绝对坐标(单位为 viewBox 坐标),必须与 <svg> 的 viewBox="0 0 160 160" 匹配,确保所有路径围绕同一视觉中心旋转;
- 动画绑定在 <g> 上,可同时驱动其内部所有子元素(如 <path>),语义清晰且便于管理;
- begin="0s" 支持延迟启动(如 "1s"),repeatCount="indefinite" 实现持续循环,也可设为具体次数(如 "3");
- 所有属性均为声明式,零 JS 依赖,兼容性好(支持 IE9+ 及现代浏览器)。
⚠️ 注意事项:
- 若路径原始坐标未居中,请先用 <g transform="translate(x,y)"> 调整位置,再添加旋转动画;
- viewBox 尺寸需覆盖全部路径坐标范围(本例中原始路径坐标达 299.99,故实际需放大 viewBox 或缩放路径——示例已按比例重设为 160×160 并平移适配,确保 80 80 为几何中心);
- 避免在 <path> 内部重复嵌套 <animateTransform>,应统一置于包裹它的 <g> 中,防止继承冲突。
通过此方法,你可轻松扩展至 N 条路径,每条路径拥有专属 dur、begin、甚至 keyTimes/values 实现复杂缓动,真正实现「一个中心、多速共舞」的 SVG 动画效果。










