在SVG中绘制箭头的动画

时间:2014-10-30 13:42:34

标签: css animation svg

我是SVG世界的新手,当我想“画”弯曲箭头时,我遇到了一些问题。

基本上,我想创建一个像this article中解释的那样的动画,但在路径的末尾有一个形状以显示箭头。

以下是我用于直箭的代码:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200">
<defs>
  <marker
    id="arrow"
    orient="auto"
    viewBox="0 0 10 10"
    markerWidth="3"
    markerHeight="4"
    markerUnits="strokeWidth"
    refX="1" refY="5">
   <polyline points="0,0 10,5 0,10 1,5" fill="black" />
  </marker>
</defs>

<path
    id="line"
    marker-end="url(#arrow)"
    stroke-width="3"
    fill="none"
    stroke="black">

    <animate
        dur="2s"
        repeatCount="indefinite"
        attributeName="d"
        values="M10,10 L10,10; M10,10 L45,25;" />
</path>

有点CSS:

#line
{
   stroke-dasharray: 5;
  stroke-dashoffset: 10;
  -webkit-animation: draw 1s linear infinite;
}

@-webkit-keyframes draw
{
  to { stroke-dashoffset: 0;}
}

结果如下:

Straight arrow

这很酷,但现在我想要一个弯曲的箭头。所以我更新了如下的animate标签:

<animate
        dur="2s"
        repeatCount="indefinite"
        attributeName="d"
        values="M7,121 C7,121 7,121 7,121; M7,121 C66,4 143,75 147,125" />

我只是改变了动画的路径,以便有一个弯曲的路径。但结果如下:

Curved arrow

我认为这很合乎逻辑,但这不是我想要的。该标记目前正在直线上移动;它应该遵循绘图路径。

我不知道如何这样做,说实话,任何建议都会很棒:)

您可以找到a JSFiddle here

正如您所看到的,在这些实验中没有使用JS,如果我们可以避免使用这种语言并使用SVG + CSS,那就太棒了。

提前致谢!

1 个答案:

答案 0 :(得分:2)

我想你可能会发现这篇关于svg line动画的文章非常有用: https://css-tricks.com/svg-line-animation-works/

CSS:

.path {
   stroke-dasharray: 1000;
   stroke-dashoffset: 1000;
   animation: dash 5s linear alternate infinite;
}

@keyframes dash {
  from {
     stroke-dashoffset: 1000;
  }
  to {
     stroke-dashoffset: 0;
  }
}

演示中的演示:http://codepen.io/chriscoyier/pen/bGyoz

有一个关于JavaScript的警告并确定要绘制的线的长度。如果您不想使用JS,可以通过更新dasharray和dashoffset值来确定动画的长度。