I'm attempting to animate a pie chart that rotates from 0 degrees to whatever degree I want it to end on (lets say 300 degrees, doesn't matter). There's an underlying circle with one that rotates on top. As it stands right now, the pie chart rotates a full 360 degrees before ending with the final degree position (300 in this case). Right now it only works in Chrome.
JSFiddle
My HTML:
<div class="spinner">
<span><em></em></span>
<span><em></em></span>
</div>
My 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%;
}
This was a little tricky because there are really two circles rotating here. You actually want one (rotate-rt) to stop halfway and the other (rotate-lt) to continue the remaining 120 degrees (300 degrees total):
@-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/
Edit: To clarify, if you wanted this to rotate less than 180 degrees, you would remove the second animation keyframes rule altogether: http://jsfiddle.net/BkJY7/8/
You're looking for -webkit-animation-fill-mode: forwards;
which stops the animation at the end. You can read more about it here: Can't stop animation at end of one cycle
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With