我只使用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;
它有效,但它有点不稳定。任何平滑动画的提示都会很棒。
谢谢!
答案 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;
在元素上,您正在制作动画。
并且仅在动画时更改 opacity
和 transform
属性。
浏览器针对动画这些属性进行了优化,并确保您最大限度地减少任何性能开销。
几乎可以使用 transforms
实现您想要的任何动画。