摇摇欲坠的CSS动画

时间:2016-12-22 16:36:09

标签: css css3 animation

我只使用HTML / CSS制作了一个派对计时器动画。你可以在这里看到它:

https://jsfiddle.net/yisusans/why2wy5q/



.timer-container {
  background: -webkit-linear-gradient(left, #677291 50%, #D8DAE5 50%);
  border-radius: 100%;
  height: 30px;
  position: relative;
  top: 5px;
  left: 9px;
  width: 30px;
  -webkit-animation: time 20s linear 1;
  animation: time 20s linear 1;
  -webkit-transition-timing-function: ease-in;
  transition-timing-function: ease-in;
  -webkit-transition-duration: 1s;
  transition-duration: 1s;
  -moz-transform: translateZ(1) scale(1.0, 1.0);
  -ms-transform: translateZ(1) scale(1.0, 1.0);
  -o-transform: translateZ(1) scale(1.0, 1.0);
  -webkit-transform: translateZ(1) scale(1.0, 1.0);
  transform: translateZ(1) scale(1.0, 1.0);
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
}
.timer {
  border-radius: 100% 0 0 100% / 50% 0 0 50%;
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  width: 50%;
  -webkit-animation: mask 20s linear 1;
  -webkit-transform-origin: 100% 50%;
  -webkit-transition-timing-function: ease-in;
  -webkit-transition-duration: 1s;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
}
@-webkit-keyframes time {
  100% {
    -webkit-transform: rotate(360deg);
  }
}
@-webkit-keyframes mask {
  0% {
    background: #D8DAE5;
    -webkit-transform: rotate(0deg);
  }
  50% {
    background: #D8DAE5;
    -webkit-transform: rotate(-180deg);
  }
  50.01% {
    background: #677291;
    -webkit-transform: rotate(0deg);
  }
  100% {
    background: #677291;
    -webkit-transform: rotate(-180deg);
  }
}
@keyframes time {
  100% {
    transform: rotate(360deg);
  }
}
@keyframes mask {
  0% {
    background: #D8DAE5;
    transform: rotate(0deg);
  }
  50% {
    background: #D8DAE5;
    transform: rotate(-180deg);
  }
  50.01% {
    background: #677291;
    transform: rotate(0deg);
  }
  100% {
    background: #677291;
    transform: rotate(-180deg);
  }
}

<div class='timer-container'>
  <div class='timer'></div>
</div>
&#13;
&#13;
&#13;

它有效,但它有点不稳定。任何平滑动画的提示都会很棒。

谢谢!

3 个答案:

答案 0 :(得分:0)

它在Safari,Chrome和Firefox的MacBook Pro上运行非常流畅,但CSS动画受设备和浏览器之间性能差异的影响。您可能只是看到了设备的限制。

它也可能在jsfiddle之外运行得更顺畅。

答案 1 :(得分:0)

我遇到过这篇文章: Improving CSS3 transition performance

它在动画表现方面非常有用。但是我很想知道是否有其他人有任何其他见解。

答案 2 :(得分:0)

首先,
干得好……
其次,
对于这个答案,我似乎迟到了 4 年。但是,这里是...

就像上面帖子中建议的 @dave 一样......我也未能重现动画中的抖动问题。 (甚至增加 .timer-container 选择器的高度和宽度属性并仔细观察)它运行得非常流畅。而且您提供的代码片段似乎没有任何问题。

但我会将这个答案留给那些想要快速修复常见 CSS 动画抖动的人,他们可能会遇到这种情况。

设置

backface-visibility: hidden;

在元素上,您正在制作动画。

并且仅在动画时更改 opacitytransform 属性。

浏览器针对动画这些属性进行了优化,并确保您最大限度地减少任何性能开销。

几乎可以使用 transforms 实现您想要的任何动画。