动画这个标志

时间:2012-09-15 14:12:38

标签: javascript html html5 animation svg

我想为此徽标制作动画。所有需要发生的事情是线条平稳地移动到不同的位置。我有一个SVG版本的徽标。最简单的方法是什么?单独编辑每一帧然后将它们制作成动画GIF需要太长时间,使得动画不稳定,并且太大而无法加载。

我不想使用像Flash这样的弃用技术。

最好的方法是什么?

这是我想要实现的非完成版本; http://heuvel-folie-serres.com/v2/img/logo_moving.gif


PNG; http://heuvel-folie-serres.com/v2/img/logo.png
SVG; http://heuvel-folie-serres.com/v2/img/logo.svg

1 个答案:

答案 0 :(得分:1)

没有简单的方法可以为SVG设置动画。它是一个复合路径,找到正确的节点不仅麻烦,而且动画也很昂贵。

您需要修改原始SVG以删除想要设置动画的线条,然后您可以添加诸如...之类的线条。

 <line x1="23" y1="32" x2="40" y2="32" class="animated" />
 <line x1="93" y1="32" x2="75" y2="32" class="animated" />
 <line x1="125" y1="32" x2="143" y2="32" class="animated" />
 <line x1="195" y1="32" x2="177" y2="32" class="animated" />

您可以使用SMIL制作动画但不幸的是IE9不支持它,所以这是一个非常天真的动画实现:

var lines = document.getElementsByClassName('animated');
var y = parseInt(lines[0].getAttribute("y2"));
var increment = .1;
var moveLines = function(){

    if (y < 32) increment = .1
    if (y > 41.5) increment = -.1
    y+=increment;
    lines[0].setAttribute('y1', y)
    lines[1].setAttribute('y1', y)
    lines[2].setAttribute('y1', y)
    lines[3].setAttribute('y1', y)
}

var t = window.setInterval(moveLines, 30);

更强大的解决方案将使用requestAnimationFrame,这样可以轻松添加缓动功能,并且在当前选项卡未激活时不会消耗资源。

这是一个演示(您必须删除矢量编辑软件中的现有行)。 http://jsfiddle.net/6WPEb/