css - 使用关键帧重启动画

标签 css css-animations keyframe svg-animate

我这辈子都想不出如何重新开始我的动画。这是我到目前为止的进展。 它是用 svg mask 动画构建的。

http://codepen.io/djmaller/pen/myrrbd

我想让它像现在一样动画。但我希望它保持一秒钟或动画的最后 10%,然后在重新开始之前淡出。但是我不知道如何防止动画提前开始。就好像它的动画效果很好,但随后它在所有随机部分都失去了动画效果。太令人沮丧了。

这里有人有想法吗? 我建错了吗? 我相信解决方案在于 CSS 中的@keyframes

HTML

<?xml version="1.0" encoding="utf-8"?>

<polygon id="clipmaskpath1" points="52.3,124.6 1.1,133.9 50.1,143.6"/>

<polygon id="clipmaskpath2" points="66.6,0.2 66.6,0.2 50.1,143.6 112.3,126.4 123.6,51.3"/>

<polygon id="clipmaskpath3" points="189.9,50.2 131.3,0.2 66.6,0.2 189.9,110.7 189.9,50.2"/>

<polygon id="clipmaskpath4" points="313.2,0.2 248.5,0.2 189.9,50.2 189.9,110.7"/>

<polygon id="clipmaskpath5" points="313.2,0.2 256.2,51.3 267.5,126.4 329.7,143.6"/>

<polygon id="clipmaskpath6" points="378.7,133.9 327.5,124.6 329.7,143.6"/>

<clipPath id="clipmaskA">
<use xlink:href="#clipmaskpath1" style="overflow:visible;"/>
</clipPath>

<clipPath id="clipmaskB">
<use xlink:href="#clipmaskpath2" style="overflow:visible;"/>
</clipPath>

<clipPath id="clipmaskC">
<use xlink:href="#clipmaskpath3" style="overflow:visible;"/>
</clipPath>

<clipPath id="clipmaskD">
<use xlink:href="#clipmaskpath4" style="overflow:visible;"/>
</clipPath>

<clipPath id="clipmaskE">
<use xlink:href="#clipmaskpath5" style="overflow:visible;"/>
</clipPath>

<clipPath id="clipmaskF">
<use xlink:href="#clipmaskpath6" style="overflow:visible;"/>
</clipPath>
<polygon id="A" style="clip-path:url(#clipmaskA)" points="52.3,124.6 1.1,133.9 50.1,143.6"/>

<polygon id="B" style="clip-path:url(#clipmaskB)" points="66.6,0.2 66.6,0.2 50.1,143.6 112.3,126.4 123.6,51.3"/>

<polygon id="C" style="clip-path:url(#clipmaskC)" points="189.9,50.2 131.3,0.2 66.6,0.2 189.9,110.7 189.9,50.2"/>

<polygon id="D" style="clip-path:url(#clipmaskD)" points="313.2,0.2 248.5,0.2 189.9,50.2 189.9,110.7"/>

<polygon id="E" style="clip-path:url(#clipmaskE)" points="313.2,0.2 256.2,51.3 267.5,126.4 329.7,143.6"/>

<polygon id="F" style="clip-path:url(#clipmaskF)" points="378.7,133.9 327.5,124.6 329.7,143.6"/>

和 CSS

  svg {
  display:block;
  width:380px;
  height:144px;
  margin: 0 auto;
 }


/*Shape Fills*/

#A, #D, #F {
  fill:#FFA95A;
  }

#B, #E {
  fill:#FF8300;
  }

#C {
  fill:#FFB571;
  }

/* Opacity Animation */

@keyframes fade{
  90%{opacity:1}
  100%{opacity:0}
}

.fade{
  animation:fade infinite running 2s ease-in-out;
}

/*Mask Animations*/

#svg-logo #clipmaskA {
animation: move-mask-1 infinite running 2s ease-in-out;
}

#svg-logo #clipmaskB {
animation: move-mask-2 infinite running 2s ease-in-out;
}

#svg-logo #clipmaskC {
animation: move-mask-3 infinite running 2s ease-in-out;
}

#svg-logo #clipmaskD {
animation: move-mask-4 infinite running 2s ease-in-out;
}

#svg-logo #clipmaskE {
animation: move-mask-5 infinite running 2s ease-in-out;
}

#svg-logo #clipmaskF {
animation: move-mask-6 infinite running 2s ease-in-out;
}

/* Mask Translations */

@keyframes move-mask-1 {
  0% {transform: translate(-99.99%,0%)}
  15% {transform: translate(0,0)}
}

@keyframes move-mask-2 {
  16% {transform: translate(-18%,99.99%)}
  30% {transform: translate(0,0)}
}

@keyframes move-mask-3 {
  31% {transform: translate(-99.99%,-99.99%)}
  45% {transform: translate(0,0)}
}

@keyframes move-mask-4 {
  46% {transform: translate(-99.99%,99.99%)}
  60% {transform: translate(0,0)}
}

@keyframes move-mask-5 {
  61% {transform: translate(-20%,-99.99%)}
  75% {transform: translate(0,0)}
}

@keyframes move-mask-6 {
  76% {transform: translate(-99.99%,0)}
  90% {transform: translate(0,0)}
}

最佳答案

我刚刚发现,在每个 @keyframe 动画开始时,我需要进行 0% 的平移,以与下一步的 mask 位置相匹配。

在我之前

@keyframes move-mask-2 {
  16% {transform: translate(-18%,99.99%)}
  30% {transform: translate(0,0)}
}

我通过添加带有 0% 的行来修复它

@keyframes move-mask-2 {
  0%% {transform: translate(-18%,99.99%)}
  16% {transform: translate(-18%,99.99%)}
  30% {transform: translate(0,0)}
}

关于css - 使用关键帧重启动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27628498/

相关文章:

html - 如何防止元素内的分栏?

css - 如何使 DIV 垂直和水平居中?

javascript - 高度 100vh - JavaScript 中其他元素的高度

css - 动画错误,动画的优先级,当动画应用于 child 和 parent 时

javascript - 在特定操作上使用 javascript 运行 css 动画

html - CSS3 动画 - 流畅的无限动画

CSS3 关键帧缓入框然后缓出

html - <br> 不适用于 <ul> <li> 和 <span>

html - 在 CSS3 动画期间更改兄弟元素的属性

html - CSS 翻译与关键帧动画和悬停缩放不能一起工作