我正在尝试使用步骤进行连续旋转动画(无限)的简单示例,但我似乎无法在状态之间进行平滑过渡。 所以我正在尝试的是将文本框的旋转(无限)从0度设置为360度,并在每个步骤之间暂停:demo jsfiddle。 但跳跃是瞬间的,我不能让它们从一个到另一个平滑过渡。 我怎样才能实现这一点,只使用CSS?
到目前为止我的代码是:
<input type="text" id="textbox" class='textbox animate' value="Text box"/>
body, html {
width: 100%;
height: 100%;
background: #ccc;
display: flex;
align-items: center;
justify-content: center;
flex-direction:column;
}
input {
margin-top: 70px;
clear: both;
}
.textbox {
width: auto;
display:block;
text-align: center;
}
.textbox.animate {
animation:spin 30s steps(30, end) infinite;
transition: rotate 0.3s ease;
}
@keyframes spin {
100% { transform: rotate(360deg); }
}
答案 0 :(得分:1)
据我所知,你试图实现的效果不是steps()
function可以达到的效果,因为步骤功能就像一个阶梯,在动画的每一步之间有一个急剧的跳跃
您需要手动编写关键帧,以便在步骤的起点和终点之间有一个平滑的移动,然后暂停,直到下一步开始。以下代码片段执行此操作,具体如下:
我根据编号选择了关键帧选择器(百分比值)。的步骤。必须总共有30个步骤,因此每个步骤(旋转+暂停)应该超过3.33%跨度。然后我给旋转和暂停的时间相等,所以旋转完成时为1.66%,暂停完成时为3.33%。
如果说您需要40步,旋转应该是9度的增量,每个步骤应该超过动画持续时间的2.5%。因此,旋转结束时为1.25%,暂停结束时为2.5%(然后下一步旋转结束时为3.75%,暂停结束时为5%,依此类推)。
body,
html {
width: 100%;
height: 100%;
background: #ccc;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
input {
margin-top: 70px;
clear: both;
}
.textbox {
width: auto;
display: block;
text-align: center;
}
.textbox.animate {
animation: spin 30s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
1.66%,
3.33% {
transform: rotate(12deg);
}
4.99%,
6.66% {
transform: rotate(24deg);
}
8.32%,
9.99% {
transform: rotate(36deg);
}
11.65%,
13.32% {
transform: rotate(48deg);
}
14.98%,
16.65% {
transform: rotate(60deg);
}
18.31%,
19.98% {
transform: rotate(72deg);
}
21.65%,
23.31% {
transform: rotate(84deg);
}
24.98%,
26.65% {
transform: rotate(96deg);
}
28.31%,
29.98% {
transform: rotate(108deg);
}
31.65%,
33.33% {
transform: rotate(120deg);
}
34.98%,
36.65% {
transform: rotate(132deg);
}
38.33%,
39.98% {
transform: rotate(144deg);
}
41.65%,
43.33% {
transform: rotate(156deg);
}
44.98%,
46.65% {
transform: rotate(168deg);
}
48.33%,
50% {
transform: rotate(180deg);
}
51.65%,
53.33% {
transform: rotate(192deg);
}
54.99%,
56.65% {
transform: rotate(204deg);
}
58.33%,
59.99% {
transform: rotate(216deg);
}
61.65%,
63.33% {
transform: rotate(228deg);
}
64.99%,
66.66% {
transform: rotate(240deg);
}
68.33%,
69.99% {
transform: rotate(252deg);
}
71.66%, 73.33% {
transform: rotate(264deg);
}
74.99%,
76.66% {
transform: rotate(276deg);
}
78.33%,
79.99% {
transform: rotate(288deg);
}
81.66%,
83.33% {
transform: rotate(300deg);
}
84.99%,
86.66% {
transform: rotate(312deg);
}
88.33%,
89.99% {
transform: rotate(324deg);
}
91.66%,
93.33% {
transform: rotate(336deg);
}
94.99%,
96.66% {
transform: rotate(348deg);
}
98.33%,
100% {
transform: rotate(360deg);
}
}
&#13;
<script>
function startAnimation() {
document.getElementById("textbox").className = "textbox animate";
}
</script>
<input type="text" id="textbox" class='textbox animate' value="Text box" />
&#13;
答案 1 :(得分:0)
正如Harry所说,你必须在这里添加关键帧动画,
结帐更新后的fiddle here
您的CSS将是这样的
.textbox.animate {
-webkit-animation: circle infinite .75s linear;
-moz-animation: circle infinite .75s linear;
-o-animation: circle infinite .75s linear;
animation: circle infinite .75s linear;
transition: rotate 0.3s ease;}
@-webkit-keyframes circle
{
0%
{
-webkit-transform: rotate(0);
-ms-transform: rotate(0);
-o-transform: rotate(0);
transform: rotate(0);}
100%
{
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);}}
@-moz-keyframes circle
{
0%
{
-webkit-transform: rotate(0);
-ms-transform: rotate(0);
-o-transform: rotate(0);
transform: rotate(0);}
100%
{
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);}}
@-o-keyframes circle
{
0%
{
-webkit-transform: rotate(0);
-ms-transform: rotate(0);
-o-transform: rotate(0);
transform: rotate(0);}
100%
{
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);}}
@keyframes circle
{
0%
{
-webkit-transform: rotate(0);
-ms-transform: rotate(0);
-o-transform: rotate(0);
transform: rotate(0);}
100%
{
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);}}