使用animateMotion以及keyTimes / keyPoints

时间:2013-08-08 23:02:44

标签: animation svg smil

我正在尝试使用<animateMotion>keyTimes="…"属性在SVG keyPoints="…"上使用非线性动画速率。它似乎不起作用:动画运动尽可能线性。

这是测试文件 try it!

<svg xmlns="http://www.w3.org/2000/svg" xmlns:x="http://www.w3.org/1999/xlink"
     viewBox="0 0 300 200">
  <style>
    path   { stroke:#999 }
    circle { fill-opacity:0.5; stroke:black }
  </style>
  <path   id="p" d="M30,160 L270,40" />
  <circle id="c" r="5" />
  <animateMotion x:href="#c" fill="freeze"
    dur="10s"
    keyTimes="0;0.1;1"
    keyPoints="0;0.9;1">
    <mpath x:href="#p" />
  </animateMotion>
</svg>

工作时球应在第一秒内沿路径移动90%,并在剩余的9秒内移动最后10%。我需要做些什么才能让它发挥作用?

我发现another example online工作正常,所以我知道这不是我的操作系统/浏览器/版本错误。

(FWIW:Win7x64,Chrome30)

2 个答案:

答案 0 :(得分:5)

我发现了自己的错误。即使calcMode的默认值为linear - 这就是我想要的 - 我没有仔细阅读规范,看到它是不同的默认值<animateMotion>元素。

添加明确的calcMode="linear"可以解决问题。

答案 1 :(得分:3)

动画动作的默认calcmode值为paced而非linear;

http://www.w3.org/TR/SVG/animate.html#AnimateMotionElement

并且,如果指定 calcmode =“paced”,则将忽略任何“keyTimes”或“keySplines”。

http://www.w3.org/TR/SVG/animate.html#CalcModeAttribute;

这就是为什么你没有得到所需的输出......