【问题标题】:Animating this logo动画这个标志
【发布时间】:2012-09-18 10:56:31
【问题描述】:

我想为这个徽标制作动画。需要做的就是让线条平稳地移动到不同的位置。我有一个 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

【问题讨论】:

标签: javascript html animation svg


【解决方案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/

【讨论】:

  • 这看起来很棒!我试试看。
猜你喜欢
  • 2015-06-11
  • 2021-11-01
  • 1970-01-01
  • 2021-09-12
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多