SVG文件中星星类转子旋转动画实现问题求助
解决SVG星星绕中心旋转(螺旋桨效果)的问题
嘿,我知道问题出在哪啦!你现在的旋转动画没达到螺旋桨那种绕自身中心转动的效果,核心原因是SVG元素的默认变换原点不是星星的几何中心,导致星星是绕着非中心点旋转,自然就不像螺旋桨啦。
解决方案
只需要给你的.my-spin类添加transform-origin: center center;(或者简写为transform-origin: 50% 50%;),强制让旋转动画以元素的中心为轴。
修改后的完整代码如下:
.my-spin { animation: spin 2s linear infinite; transform-origin: center center; /* 关键新增属性 */ } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } /* 用360deg更直观,和359deg效果几乎无差 */ }
<svg enable-background="new 0 0 951.7 589.2" version="1.1" viewBox="0 0 951.7 589.2" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"> <circle cx="567.1" cy="162.1" r="7.4" fill="#fff"/> <polygon class="my-spin" points="567 156.1 568.7 159.6 572.6 160.2 569.8 162.9 570.5 166.8 567 165 563.5 166.8 564.2 162.9 561.4 160.2 565.3 159.6" fill="#F70606"/> <circle cx="694.4" cy="189.4" r="7.1" fill="#fff"/> <polygon class="my-spin" points="694.3 183.6 696 187 699.7 187.5 697 190.2 697.7 193.9 694.3 192.1 690.9 193.9 691.6 190.2 688.9 187.5 692.6 187" fill="#F70606" stroke="#E20000" stroke-miterlimit="10" stroke-width=".6338"/> <circle cx="522.1" cy="302.7" r="7.8" fill="#fff"/> <polygon class="my-spin" points="522 296.2 523.9 300 528 300.6 525 303.5 525.7 307.6 522 305.7 518.4 307.6 519.1 303.5 516.1 300.6 520.2 300" fill="#F70606"/> <circle cx="644.8" cy="381.5" r="6.8" fill="#fff"/> <polygon class="my-spin" points="644.7 375.8 646.3 379.1 649.9 379.6 647.3 382.2 647.9 385.8 644.7 384.1 641.5 385.8 642.1 382.2 639.5 379.6 643.1 379.1" fill="#F70606"/> <circle cx="346.5" cy="274.1" r="7.8" fill="#fff"/> </svg>
额外说明
- 如果个别星星旋转时还是有点偏移,你可以手动指定
transform-origin的具体坐标(比如对应星星的中心点坐标),不过对于你代码里的这些多边形,center center已经能完美匹配它们的视觉中心了。 - 把@keyframes里的359deg改成360deg只是为了逻辑更通顺,实际动画效果和原来几乎没有区别。
内容的提问来源于stack exchange,提问作者Tran Audi
相关产品推荐
相关产品推荐

