使用 SVG 动画和翻转六边形

Posted

技术标签:

【中文标题】使用 SVG 动画和翻转六边形【英文标题】:Using SVG to animate and flip a hexagon 【发布时间】:2016-12-30 19:30:34 【问题描述】:

我从未真正使用过 SVG,但现在阅读了一些关于它的教程并测试了一些东西。我正在学习如何制作六边形的形状,但现在需要让它在垂直轴上向下翻转并扩大尺寸,同时保持未翻转六边形的底部作为新翻转六边形的顶部。

我的代码在这里:

<html>
  <style>    
    #test:hover 
      fill: yellow;
    
  </style>
  <body>
    <div class="viewBox">
      <h1>SVG Testing</h1>
      <svg   version="1.1" xmlns="http://www.w3.org/2000/svg" style="background-color: gray;">
        <path d="M0 86.60254037844386L50 0L150 0L200 86.60254037844386L150 173.20508075688772L50 173.20508075688772Z" fill="green" id="test"></path>
      </svg>
    </div>
  </body>
</html> 

我接下来的步骤是什么?

我是否使用库来执行此操作?

【问题讨论】:

【参考方案1】:

您可以使用 Snap,因为您已经用它标记了问题..

Snap('#test').animate( transform: 't0,260s2,-2',2000, mina.bounce)

翻译“t”和比例“s”,因为底线会在放大时自动漂移变化(或者您可以从中心缩放)。

jsfiddle

【讨论】:

【参考方案2】:

这是我根据我们得到的信息很快得出的结论。

#test:hover

  fill: yellow;
  transform:rotateX(-180deg) translateY(-100%) scale(1.2);
  transition:ease 1s all;
  transform-style: preserve-3d;
  transform-origin: 100%;

下面是jsfiddle。 这可能需要 -webkit 修改才能在所有浏览器上使用。 https://jsfiddle.net/9xqqc1yk/

【讨论】:

不幸的是,SVG 元素上的preserve-3d 尚未被浏览器广泛支持。 感谢您对我进行了有关该主题的教育。那么我不得不说这可能不是最好的路线。【参考方案3】:

我做了类似的东西,看看吧..是这样吗?

#test
  animation-fill-mode: forwards;
  animation-timing-function: linear;
  animation: hexagon 4200ms 1;
  -webkit-animation-delay: 2600ms;/* Chrome, Safari, Opera */
  animation-delay: 2600ms;
  -webkit-animation-iteration-count: infinite; 
  animation-iteration-count: infinite;


@keyframes hexagon
  0%,100%
     rotateX(0deg);
       fill: green;
     -ms-transform: scale(1, 1); 
    -webkit-transform: scale(1, 1);
    transform: scale(1, 1);
   transform-origin: 0px;
  
  
 30%
    fill: green;
     -ms-transform: scale(1, 0.08); 
    -webkit-transform: scale(1, 0.08);
    transform: scale(1, 0.08);
   transform-origin: 0px 90px;
  
  
  50%
      fill: yellow;
     -ms-transform: scale(1, 1); 
    -webkit-transform: scale(1, 1);
    transform: scale(1, 1);
   transform-origin: 0px;
  
  70%
      fill: yellow;
     -ms-transform: scale(1, 0.08); 
    -webkit-transform: scale(1, 0.08);
    transform: scale(1, 0.08);
   transform-origin: 0px 90px;
  
  


  
<html>

<body>

    <div class="viewBox">
        <h1>SVG Testing</h1>


        <svg   version="1.1" xmlns="http://www.w3.org/2000/svg" style="background-color: gray;">

            <path d="M0 86.60254037844386L50 0L150 0L200 86.60254037844386L150 173.20508075688772L50 173.20508075688772Z" fill="green" id="test"></path>
        </svg>
    </div>
</body>
</html>

【讨论】:

以上是关于使用 SVG 动画和翻转六边形的主要内容,如果未能解决你的问题,请参考以下文章

创建动画SVG路径

svg.js元素的动画旋转给出了意想不到的结果(可见“摇摆”)

围绕环动画 SVG 电子

SVG入门

启动 svg 动画 onclick 事件

如何在React Native中为SVG坐标设置动画?