【问题标题】:Seamless SVG Animation无缝 SVG 动画
【发布时间】:2017-04-15 07:18:39
【问题描述】:

我正在尝试制作一个无缝的动画,所以 svg 只是继续像雨一样在一个连续的循环中运行。问题是动画重置,你可以知道。我想用 CSS3 动画来做到这一点。有可能吗?

完整代码在下面的codepen中

#sprinkles                                                  { position:absolute; height:100%; width:100%; }
#sprinkles .sprinkle                                        { animation:rainSprinkles .85s linear infinite }
#sprinkles .sprinkle.white                                  { fill:$white; }
#sprinkles .sprinkle.blue                                   { fill:$blue; }
#sprinkles .sprinkle.yellow                                 { fill:$yellow; }
#sprinkles .sprinkle.pink                                   { fill:$hot-pink; }

@keyframes rainSprinkles {
    0% {

              transform: translateY(-100%);
    }

    100% {
      visibility: hidden;

              transform: translateY(1000%);
    }
}

下面的代码:
http://codepen.io/Jesders88/pen/bBYQom

【问题讨论】:

    标签: css svg css-animations css-transforms


    【解决方案1】:

    最简单的方法是让洒水器比屏幕高。现在,当您将它们向下移动时,屏幕上会出现更多内容。

    Here's a demo.

    我对您的示例进行了一项更改。我没有使用四个相同的洒水方块,而是只取了四个中的一个并将其变成了一种图案。这样 SVG 会为您重复它,您可以用连续的洒水图案填充您想要的任何区域。

    然后我制作了一个与屏幕一样宽且高度等于 (svgHeight + patternHeight) 的矩形。我从屏幕顶部的 -patternHeight 开始,然后将其动画化到一个 patternHeight (487) 的距离。

    #rainRect {
      animation: rainSprinkles 2s linear infinite;
    }
    
    @keyframes rainSprinkles {
      from {
        transform: translateY(0px);
      }
    
      to {
        transform: translateY(487px);
      }
    }
    

    我们将它精确地移动一个 patternHeight 以便当它再次跳回以开始另一个动画循环时它看起来是连续的。

    【讨论】:

    • 这很酷。唯一的问题是,当我尝试为单个洒水设置另一个动画时,它会旋转整个盒子。我设想让所有的洒水器以不同的速度下落,它们同时旋转和缩放。我想我的问题是,有没有办法在模式中旋转整个盒子?
    • 我尝试将另一个动画添加到单个洒水。我想以不同的速度将它们全部翻译下来。我得到了它的工作,但你可以告诉我们模式结束了。广场的底部很明显。我想如果我改变动画又不流畅了。 codepen.io/Jesders88/pen/bBYQom?editors=1100
    • 如果您想这样做,那么您将无法真正使用模式。您将需要重新定义一个巨大的对象,并定义每个洒水。
    • 那让我回到我原来的问题。洒水会以不同的速度下降,但当动画再次开始时,你仍然会得到那种跳跃的效果。我是否只需要再次将 SVG 的位置移出屏幕?任何帮助在这里表示赞赏。在重新开始之前,我无法弄清楚如何循环 SVG 而不获得那种跳跃的效果或让洒水从屏幕上消失。你有一个例子,或者你能在我的代码笔中帮助我吗?
    • 一种方法是只做我已经做过的事情,除了将你的 SVG 分成两层或多层。然后将相同的动画应用到具有不同持续时间的每一层。
    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 2019-08-22
    • 2011-12-15
    • 2013-01-20
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多