javascript - 旋转椭圆形 SVG 对象

标签 javascript html css svg adobe-illustrator

我正在尝试将我的椭圆形图像设置为以固定 Angular 旋转的动画,以便轮廓围绕一个区域旋转而不改变该区域的形状。

我该怎么做?我可以只使用一张图片还是需要几张沿着椭圆形路径的小图片?

这就是我所做的 (jsfiddle),如您所见,该区域正在根据旋转改变形状

<svg xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
  <image x="20" y="20" width="300" height="80"
     xlink:href="http://i.imgur.com/gTlsQx4.png">
  <animateTransform attributeType="xml"
                    attributeName="transform"
                    type="rotate"
                    from="0 180 50"
                    to="360 180 50"
                    dur="4s"
                    repeatCount="indefinite"/>
</image>  
</svg>

Image for more clarity

最佳答案

我不是图形天才,但我很确定这不能用你现有的东西来完成。如果你拿走动画并检查 PNG 本身,你会注意到齿轮已经在一个固定的地方扭曲了,two-point perspective。方式——齿轮正在“远离”我们,观众。

但图像本身是二维的,无论您在 SVG 或 CSS 或 Canvas 中如何旋转它,齿轮始终会以相同的方式拉伸(stretch)。

如果有解决方案,它会在动画的关键点涉及一些严重的图像扭曲,并且对光栅化图像执行扭曲总是会降低视觉保真度。

这里有一些替代方案:

  • 有一个很好的旧备用:齿轮执行完整旋转的 3D 动画的 GIF 动画。
  • 您可以将 3D 动画分割成一系列 2D 帧,然后将它们拼凑成一个 sprite 表,然后使用 JavaScript 制作动画。
  • 你可以使用 Flash。
  • 您可以尝试使用 WebGL。

关于javascript - 旋转椭圆形 SVG 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31417224/

相关文章:

javascript - React Native 从外部源加载 JSX 并在运行时对其进行转换

javascript - 从 map 外部单击的 Leaflet openPopup 方法

javascript - 如何告诉 mobileinit 暂停执行直到加载 json

javascript - sweet alert 确认后继续提交表单

html - 只有主 div 带有 overflow hidden

css - 了解网格列属性

javascript - AngularJS 父子循环分页

html - 为什么这个 html 在 css 中被检查为有效?

jquery - 使用 Less 通过实时预览更改 CSS 值

css - 我正在尝试从 css 每隔 5 秒自动旋转图像