使CSS3动画旋转只旋转一次

8
我正在尝试制作一个动画饼图,可以从0度旋转到任意角度(比如说300度)。这个饼图由一个底部圆形和一个顶部旋转的圆形组成。目前情况是,在结束时(此处为300度),饼图将完全旋转360度。目前只在Chrome中可用。 JSFiddle 我的HTML代码:
<div class="spinner">
  <span><em></em></span>
  <span><em></em></span>
</div>

我的CSS:

.spinner {
  width: 250px;
  height: 250px;
  background: #aaa;
  margin: 0 auto;
  position: relative;
}
.spinner:after {
  position: absolute;
  content: "";
  width: 0%;
  height: 0%;
  border-radius: 100%;
  background: #fff;
  top: 10%;
  left: 10%;
}
.spinner span em {
  background: #0e728e;
  -webkit-animation-duration: 6s; 
}
@-webkit-keyframes rotate-rt {
  0%   { -webkit-transform: rotate(0deg); }
  25%  { -webkit-transform: rotate(180deg); }
  100% { -webkit-transform: rotate(180deg); }
}
@-webkit-keyframes rotate-lt {
  0%   { -webkit-transform: rotate(0deg); }
  25%  { -webkit-transform: rotate(0deg); }
  50%  { -webkit-transform: rotate(120deg); }
  100% { -webkit-transform: rotate(120deg); }
}
.spinner {
  border-radius: 100%;
  position: relative;
}
.spinner span {
  width: 50%;
  height: 100%;
  overflow: hidden;
  position: absolute;
}
.spinner span:first-child {
  left: 0;
}
.spinner span:last-child {
  left: 50%;
}
.spinner span em {
  border-radius: 250px;
  position: absolute;
  width: 100%;
  height: 100%;
  -webkit-animation-iteration-count: 1;
  -webkit-animation-timing-function: linear;
  -webkit-animation-fill-mode: forwards;
}
.spinner span:first-child em {
  left: 100%;
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
  -webkit-animation-name: rotate-lt; 
  -webkit-transform-origin: 0 50%;
}
.spinner span:last-child em {
  left: -100%;
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
  -webkit-animation-name: rotate-rt; 
  -webkit-transform-origin: 100% 50%;
 }

5
不错的动画,我也想知道答案。 - Josh Crozier
2个回答

2

这有点棘手,因为这里实际上有两个旋转的圆。您实际上希望其中一个(rotate-rt)停在一半,另一个(rotate-lt)继续剩余的120度(总共300度):

@-webkit-keyframes rotate-rt {
    0% { -webkit-transform: rotate(0deg); }
   25% { -webkit-transform: rotate(180deg); }
  100% { -webkit-transform: rotate(180deg); }
}
@-webkit-keyframes rotate-lt {
    0% { -webkit-transform: rotate(0deg); }
   25% { -webkit-transform: rotate(0deg); }
   50% { -webkit-transform: rotate(120deg); }
  100% { -webkit-transform: rotate(120deg); }
}

http://jsfiddle.net/BkJY7/7/

编辑:澄清一下,如果您希望使其旋转的角度小于180度,则需要完全删除第二个动画关键帧规则:http://jsfiddle.net/BkJY7/8/


1
我爱你!你完全被邀请来参加我的生日派对!我会更新我的代码,以适用于所有未来的人。只是为了安心起见,您删除 rotate-rt 中的 50% 是有原因的吗?而不是仅仅将其更改为 180deg?除了减少编码之外,还有其他原因吗? - itsclarke
那是唯一的原因。我删除了不必要的部分,以保持时间/速度不变。 - skyline3000

2

谢谢,这有助于在结尾处停止,现在我只需要弄清楚如何消除额外的旋转... - itsclarke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接