如何让动画流畅?
How to make the animation smooth?
我正在尝试创建一个可更改其高度、宽度、边框半径和背景颜色的预加载器。
动画有效,但在更改之间有一个停顿。如何让动画更流畅?
fiddle:https://jsfiddle.net/Altair827/ww077qby/4/
#preloader {
margin-left: 300px;
margin-top: 200px;
height: 20px;
width: 20px;
border-radius: 10px;
background-color: violet;
-webkit-animation-name: colorIt;
animation-name: colorIt;
-webkit-animation-duration: 3s;
animation-duration: 3s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
@-webkit-keyframes colorIt {
from {
background-color: violet;
}
to 20%,40%,60%,80%,90%,99% {
}
20% {
background-color: indigo;
height: 40px;
width: 40px;
border-radius: 20px;
}
40% {
background-color: blue;
height: 50px;
width: 50px;
border-radius: 25px;
}
60% {
background-color: green;
height: 60px;
width: 60px;
border-radius: 30px;
}
80% {
background-color: yellow;
height: 70px;
width: 70px;
border-radius: 35px;
}
90% {
background-color: orange;
height: 80px;
width: 80px;
border-radius: 40px;
}
99% {
background-color: red;
height: 20px;
width: 20px;
border-radius: 10px;
}
}
@keyframes colorIt {
from {
background-color: violet;
}
to 20%,40%,60%,80%,90%,99% {
}
20% {
background-color: indigo;
height: 40px;
width: 40px;
border-radius: 20px;
}
40% {
background-color: blue;
height: 50px;
width: 50px;
border-radius: 25px;
}
60% {
background-color: green;
height: 60px;
width: 60px;
border-radius: 30px;
}
80% {
background-color: yellow;
height: 70px;
width: 70px;
border-radius: 35px;
}
90% {
background-color: orange;
height: 80px;
width: 80px;
border-radius: 40px;
}
99% {
background-color: red;
height: 20px;
width: 20px;
border-radius: 10px;
}
}
<div id="preloader"></div>
CSS 个动画的默认 easing
是 ease
。将其设置为 linear
并且不应有停顿:
animation-timing-function: linear;
#preloader {
margin-left: 300px;
margin-top: 200px;
height: 20px;
width: 20px;
border-radius: 10px;
background-color: violet;
-webkit-animation-name: colorIt;
animation-name: colorIt;
-webkit-animation-duration: 3s;
animation-duration: 3s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
-webkit-animation-timing-function: linear;
animation-timing-function: linear;
}
@-webkit-keyframes colorIt {
from {
background-color: violet;
}
to 20%,
40%,
60%,
80%,
90%,
99% {} 20% {
background-color: indigo;
height: 40px;
width: 40px;
border-radius: 20px;
}
40% {
background-color: blue;
height: 50px;
width: 50px;
border-radius: 25px;
}
60% {
background-color: green;
height: 60px;
width: 60px;
border-radius: 30px;
}
80% {
background-color: yellow;
height: 70px;
width: 70px;
border-radius: 35px;
}
90% {
background-color: orange;
height: 80px;
width: 80px;
border-radius: 40px;
}
99% {
background-color: red;
height: 20px;
width: 20px;
border-radius: 10px;
}
}
@keyframes colorIt {
from {
background-color: violet;
}
to 20%,
40%,
60%,
80%,
90%,
99% {} 20% {
background-color: indigo;
height: 40px;
width: 40px;
border-radius: 20px;
}
40% {
background-color: blue;
height: 50px;
width: 50px;
border-radius: 25px;
}
60% {
background-color: green;
height: 60px;
width: 60px;
border-radius: 30px;
}
80% {
background-color: yellow;
height: 70px;
width: 70px;
border-radius: 35px;
}
90% {
background-color: orange;
height: 80px;
width: 80px;
border-radius: 40px;
}
99% {
background-color: red;
height: 20px;
width: 20px;
border-radius: 10px;
}
}
<div id="preloader"></div>
您应该更改计时功能:
animation-timing-function: linear;
你也可以使用简写:
/* @keyframes duration | timing-function | delay | name */
animation: 3s linear .1s colorIt;
您想将动画曲线设置为线性:
-webkit-animation-timing-function: linear; /* Chrome, Safari, Opera */
animation-timing-function: linear;
这将确保您的动画顺利运行:jsfiddle
我正在尝试创建一个可更改其高度、宽度、边框半径和背景颜色的预加载器。
动画有效,但在更改之间有一个停顿。如何让动画更流畅?
fiddle:https://jsfiddle.net/Altair827/ww077qby/4/
#preloader {
margin-left: 300px;
margin-top: 200px;
height: 20px;
width: 20px;
border-radius: 10px;
background-color: violet;
-webkit-animation-name: colorIt;
animation-name: colorIt;
-webkit-animation-duration: 3s;
animation-duration: 3s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
@-webkit-keyframes colorIt {
from {
background-color: violet;
}
to 20%,40%,60%,80%,90%,99% {
}
20% {
background-color: indigo;
height: 40px;
width: 40px;
border-radius: 20px;
}
40% {
background-color: blue;
height: 50px;
width: 50px;
border-radius: 25px;
}
60% {
background-color: green;
height: 60px;
width: 60px;
border-radius: 30px;
}
80% {
background-color: yellow;
height: 70px;
width: 70px;
border-radius: 35px;
}
90% {
background-color: orange;
height: 80px;
width: 80px;
border-radius: 40px;
}
99% {
background-color: red;
height: 20px;
width: 20px;
border-radius: 10px;
}
}
@keyframes colorIt {
from {
background-color: violet;
}
to 20%,40%,60%,80%,90%,99% {
}
20% {
background-color: indigo;
height: 40px;
width: 40px;
border-radius: 20px;
}
40% {
background-color: blue;
height: 50px;
width: 50px;
border-radius: 25px;
}
60% {
background-color: green;
height: 60px;
width: 60px;
border-radius: 30px;
}
80% {
background-color: yellow;
height: 70px;
width: 70px;
border-radius: 35px;
}
90% {
background-color: orange;
height: 80px;
width: 80px;
border-radius: 40px;
}
99% {
background-color: red;
height: 20px;
width: 20px;
border-radius: 10px;
}
}
<div id="preloader"></div>
CSS 个动画的默认 easing
是 ease
。将其设置为 linear
并且不应有停顿:
animation-timing-function: linear;
#preloader {
margin-left: 300px;
margin-top: 200px;
height: 20px;
width: 20px;
border-radius: 10px;
background-color: violet;
-webkit-animation-name: colorIt;
animation-name: colorIt;
-webkit-animation-duration: 3s;
animation-duration: 3s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
-webkit-animation-timing-function: linear;
animation-timing-function: linear;
}
@-webkit-keyframes colorIt {
from {
background-color: violet;
}
to 20%,
40%,
60%,
80%,
90%,
99% {} 20% {
background-color: indigo;
height: 40px;
width: 40px;
border-radius: 20px;
}
40% {
background-color: blue;
height: 50px;
width: 50px;
border-radius: 25px;
}
60% {
background-color: green;
height: 60px;
width: 60px;
border-radius: 30px;
}
80% {
background-color: yellow;
height: 70px;
width: 70px;
border-radius: 35px;
}
90% {
background-color: orange;
height: 80px;
width: 80px;
border-radius: 40px;
}
99% {
background-color: red;
height: 20px;
width: 20px;
border-radius: 10px;
}
}
@keyframes colorIt {
from {
background-color: violet;
}
to 20%,
40%,
60%,
80%,
90%,
99% {} 20% {
background-color: indigo;
height: 40px;
width: 40px;
border-radius: 20px;
}
40% {
background-color: blue;
height: 50px;
width: 50px;
border-radius: 25px;
}
60% {
background-color: green;
height: 60px;
width: 60px;
border-radius: 30px;
}
80% {
background-color: yellow;
height: 70px;
width: 70px;
border-radius: 35px;
}
90% {
background-color: orange;
height: 80px;
width: 80px;
border-radius: 40px;
}
99% {
background-color: red;
height: 20px;
width: 20px;
border-radius: 10px;
}
}
<div id="preloader"></div>
您应该更改计时功能:
animation-timing-function: linear;
你也可以使用简写:
/* @keyframes duration | timing-function | delay | name */
animation: 3s linear .1s colorIt;
您想将动画曲线设置为线性:
-webkit-animation-timing-function: linear; /* Chrome, Safari, Opera */
animation-timing-function: linear;
这将确保您的动画顺利运行:jsfiddle