【问题标题】:SIMPLE – Animate Multiple SVGs in Sequence (like a looping GIF)SIMPLE – 按顺序为多个 SVG 制作动画(如循环 GIF)
【发布时间】:2018-07-31 07:21:42
【问题描述】:

我正在尝试制作最基本的 SVG 动画,而我所发现的一切都是在尝试教我关键帧和类似的高级东西。我了解在 After Effects 中工作的关键帧,这根本不是我需要的。

我要做的就是按顺序为相同的 8 条 svg 路径设置动画,就像翻书一样,我可以在其中轻松地编辑循环速度。我希望图像改变颜色,所以我会重复使用不同颜色保存的相同的 8 个 SVG,或者也许有更好的方法可以用代码做到这一点,我不知道。我已经包含了一个示例 GIF,它展示了我正在寻找的确切效果。基本上我想以可扩展的 SVG 格式重新创建该 GIF。你看到的是 8 张独立的图纸。

我想在我的网站上显示这个动画作为主图形,所以它需要可扩展。

我需要尽快为我的投资组合审查进行此操作。

【问题讨论】:

  • 我创建了 SVG。我在 Illustrator 中制作它们。对不起,我应该更清楚。我也可以获得每一帧的代码,我只需要知道如何为它们制作动画......

标签: svg gif svg-animate


【解决方案1】:

这是一个使用 CSS 为 8 个 SVG 帧设置动画的示例。

我们使组元素(即框架)可见 1/8 秒 (12.5%) 秒,然后使用 @keyframe 定义再次隐藏它。每个后续帧都将其动画延迟 0.125 秒,以便它们按顺序出现。

svg {
  width: 300px;
}

#frame1 {
  visibility: hidden;
  animation: 1s show infinite;
}

#frame2 {
  visibility: hidden;
  animation: 1s show infinite;
  animation-delay: 0.125s;
}

#frame3 {
  visibility: hidden;
  animation: 1s show infinite;
  animation-delay: 0.25s;
}

#frame4 {
  visibility: hidden;
  animation: 1s show infinite;
  animation-delay: 0.375s;
}

#frame5 {
  visibility: hidden;
  animation: 1s show infinite;
  animation-delay: 0.5s;
}

#frame6 {
  visibility: hidden;
  animation: 1s show infinite;
  animation-delay: 0.625s;
}

#frame7 {
  visibility: hidden;
  animation: 1s show infinite;
  animation-delay: 0.75s;
}

#frame8 {
  visibility: hidden;
  animation: 1s show infinite;
  animation-delay: 0.865s;
}

@keyframes show {
  0%   { visibility: visible;}
  12.5%  { visibility: visible; }
  12.6%  { visibility: hidden; }
  100% { visibility: hidden; }
}
<svg viewBox="0 0 300 300">
  <g id="frame1">
    <circle cx="150" cy="50" r="25"/>
  </g>
  <g id="frame2">
    <circle cx="250" cy="50" r="25"/>
  </g>
  <g id="frame3">
    <circle cx="250" cy="150" r="25"/>
  </g>
  <g id="frame4">
    <circle cx="250" cy="250" r="25"/>
  </g>
  <g id="frame5">
    <circle cx="150" cy="250" r="25"/>
  </g>
  <g id="frame6">
    <circle cx="50" cy="250" r="25"/>
  </g>
  <g id="frame7">
    <circle cx="50" cy="150" r="25"/>
  </g>
  <g id="frame8">
    <circle cx="50" cy="50" r="25"/>
  </g>
</svg>

【讨论】:

  • Paul LeBeau,非常感谢,这真的很有帮助。我的 SVG 非常复杂,我相信这会导致一个小问题。一帧将所有白色区域变为黑色,因此有点小故障。知道如何解决这个问题吗?这是沙盒的链接...cssdeck.com/labs/opmpfvdt
  • 好像是影响到第7帧,但是第7帧删掉前6帧就好了。我怀疑这是复制和粘贴错误。如果您转到示例的底部,您会看到&lt;/svg&gt; 是红色的。这表明存在一些不良嵌套。您可能在某处遗漏了 &lt;/g&gt;,而 frame7 从前一帧继承了 fill - 将白牙变黑。
  • @PaulLeBeau 在 frame3 内还有一个 &lt;g&gt;。此外,在frame7中将st2替换为st1后,牙齿不会变黑。但是,这两个问题改正后,每个周期还是有闪烁一次的感觉。你能帮忙评论一下原因和解决方法吗? :D
  • 您是在谈论您自己创建的动画吗?那么不,我真的无法帮助调试我看不到的动画。创建一个新问题并包含您的动画。也许我们可以帮助你。
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 2016-09-25
  • 2013-11-24
  • 2014-07-13
  • 1970-01-01
  • 2013-07-03
  • 2020-11-27
  • 1970-01-01
相关资源
最近更新 更多