我在网上找到了这段代码片段,并且我试图将其反转,以便圆圈从0%的全白色变为100%渐变圈,然后停止动画。但是,我似乎无法弄清楚倒车部分。我试图摆弄这些价值但似乎无法获得理想的效果。一旦梯度部分没有显示,也可以摆脱持续存在的小轮廓。欢呼声
#circle-loader-wrap {
overflow: hidden;
position: relative;
margin-top: -10px;
width: 200px;
height: 200px;
background: linear-gradient(90deg, #fdbd39,#ee6723,#E06387);
border-radius: 200px;
-ms-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
transform: rotate(180deg);
}
#circle-loader-wrap:after {
content: '';
position: absolute;
left: 15px;
top: 15px;
width: 170px;
height: 170px;
border-radius: 50%;
background-color: white;
}
#circle-loader-wrap div {
overflow: hidden;
position: absolute;
width: 50%;
height: 100%;
}
#circle-loader-wrap .loader {
position: absolute;
left: 100%;
top: 0;
width: 100%;
height: 100%;
border-radius: 1000px;
background-color: white;
}
#circle-loader-wrap .left-wrap {
left: 0;
}
#circle-loader-wrap .left-wrap .loader {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
transform-origin: 0 50% 0;
-webkit-transform-origin: 0 50% 0;
animation: loading-left 10s infinite linear;
-webkit-animation: loading-left 10s infinite linear;
}
#circle-loader-wrap .right-wrap {
left: 50%;
}
#circle-loader-wrap .right-wrap .loader {
left: -100%;
border-bottom-right-radius: 0;
border-top-right-radius: 0;
transform-origin: 100% 50% 0;
-webkit-transform-origin: 100% 50% 0;
animation: loading-right 10s infinite linear;
-webkit-animation: loading-right 10s infinite linear;
}
@keyframes loading-left {
0% {
-webkit-transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
}
}
@-webkit-keyframes loading-left {
0% {
-webkit-transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
}
}
@keyframes loading-right {
0% {
transform: rotate(0deg);
}
50% {
transform: rotate(180deg);
}
100% {
-webkit-transform: rotate(180deg);
}
}
@-webkit-keyframes loading-right {
0% {
-webkit-transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(180deg);
}
100% {
-webkit-transform: rotate(180deg);
}
}

<div class="container mt-5">
<div class="row">
<div class="col-3">
<div id="circle-loader-wrap">
<div class="left-wrap">
<div class="loader"></div>
</div>
<div class="right-wrap">
<div class="loader"></div>
</div>
</div>
</div>
</div>
</div>
&#13;
答案 0 :(得分:2)
@keyframes
是这个加载动画的棘手部分。
您可以使用开发工具检查这两个元素.left-wrap>.loader
和.right-wrap>.loader
。
在.loader
元素与其容器(.left-wrap
或.left-wrap
)重叠后,它会隐藏渐变圈。
此动画的关键点是这两个装载程序元素的关键帧和旋转度。
以左半圈和下面的代码为例,在这种情况下,左半圈的可见性由.right-wrap
和.right-wrap>.loader
控制。
当.right-wrap>.loader
的旋转为180度时,它不与其容器重叠,整个左半部分是可见的。
当我们减少旋转时,.right-wrap>.loader
及其容器的重叠部分会增加,这会隐藏一些圆圈。
此外,为了控制旋转的时间(圆圈的哪一部分,左或右,先进行旋转),关键帧分为2部分,0%-50%(第一部分)和50% -100%(第二部分)。
如果我们在0%
和50%
关键帧中设置相同的旋转,则元素不会在动画的第一部分中旋转。
从这个概念中你还可以看出,如果50%
和100%
保持相同的旋转,动画的第二部分就不会显示旋转。
要顺时针或逆时针控制,重要的是要知道旋转开始的程度以及旋转结束的程度。对于顺时针动画,旋转应从180度开始,以360度结束,而逆时针旋转从180度开始,以0度结束。
#circle-loader-wrap {
overflow: hidden;
position: relative;
margin-top: -10px;
width: 200px;
height: 200px;
background: linear-gradient(90deg, #fdbd39,#ee6723,#E06387);
border-radius: 200px;
-ms-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
transform: rotate(180deg);
}
#circle-loader-wrap:after {
content: '';
position: absolute;
left: 15px;
top: 15px;
width: 170px;
height: 170px;
border-radius: 50%;
background-color: white;
}
#circle-loader-wrap div {
overflow: hidden;
position: absolute;
width: 50%;
height: 100%;
}
#circle-loader-wrap .loader {
position: absolute;
left: 100%;
top: 0;
width: 100%;
height: 100%;
border-radius: 1000px;
background-color: white;
}
#circle-loader-wrap .left-wrap {
left: 0;
}
#circle-loader-wrap .left-wrap .loader {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
transform-origin: 0 50% 0;
-webkit-transform-origin: 0 50% 0;
animation: loading-left 10s infinite linear;
-webkit-animation: loading-left 10s infinite linear;
}
#circle-loader-wrap .right-wrap {
left: 50%;
}
#circle-loader-wrap .right-wrap .loader {
left: -100%;
border-bottom-right-radius: 0;
border-top-right-radius: 0;
transform-origin: 100% 50% 0;
-webkit-transform-origin: 100% 50% 0;
animation: loading-right 10s infinite linear;
-webkit-animation: loading-right 10s infinite linear;
}
@keyframes loading-left {
0% {
-webkit-transform: rotate(180deg);
}
50% {
-webkit-transform: rotate(180deg);
}
100% {
-webkit-transform: rotate(360deg);
}
}
@-webkit-keyframes loading-left {
0% {
-webkit-transform: rotate(180deg);
}
50% {
-webkit-transform: rotate(180deg);
}
100% {
-webkit-transform: rotate(360deg);
}
}
@keyframes loading-right {
0% {
transform: rotate(180deg);
}
50% {
transform: rotate(360deg);
}
100% {
-webkit-transform: rotate(360deg);
}
}
@-webkit-keyframes loading-right {
0% {
-webkit-transform: rotate(180deg);
}
50% {
-webkit-transform: rotate(360deg);
}
100% {
-webkit-transform: rotate(360deg);
}
}
<div class="container mt-5">
<div class="row">
<div class="col-3">
<div id="circle-loader-wrap">
<div class="left-wrap">
<div class="loader"></div>
</div>
<div class="right-wrap">
<div class="loader"></div>
</div>
</div>
</div>
</div>
</div>
答案 1 :(得分:0)
一种方法是调整动画中transform: rotate()
的参数:
#circle-loader-wrap {
overflow: hidden;
position: relative;
margin-top: -10px;
width: 200px;
height: 200px;
background: linear-gradient(90deg, #fdbd39, #ee6723, #E06387);
border-radius: 200px;
-ms-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
transform: rotate(180deg);
}
#circle-loader-wrap:after {
content: '';
position: absolute;
left: 15px;
top: 15px;
width: 170px;
height: 170px;
border-radius: 50%;
background-color: white;
}
#circle-loader-wrap div {
overflow: hidden;
position: absolute;
width: 50%;
height: 100%;
}
#circle-loader-wrap .loader {
position: absolute;
left: 100%;
top: 0;
width: 100%;
height: 100%;
border-radius: 1000px;
background-color: white;
}
#circle-loader-wrap .left-wrap {
left: 0;
}
#circle-loader-wrap .left-wrap .loader {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
transform-origin: 0 50% 0;
-webkit-transform-origin: 0 50% 0;
animation: loading-left 10s infinite linear;
-webkit-animation: loading-left 10s infinite linear;
}
#circle-loader-wrap .right-wrap {
left: 50%;
}
#circle-loader-wrap .right-wrap .loader {
left: -100%;
border-bottom-right-radius: 0;
border-top-right-radius: 0;
transform-origin: 100% 50% 0;
-webkit-transform-origin: 100% 50% 0;
animation: loading-right 10s infinite linear;
-webkit-animation: loading-right 10s infinite linear;
}
@keyframes loading-left {
0% {
-webkit-transform: rotate(-180deg);
}
50% {
-webkit-transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(0deg);
}
}
@-webkit-keyframes loading-left {
0% {
-webkit-transform: rotate(-180deg);
}
50% {
-webkit-transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(0deg);
}
}
@keyframes loading-right {
0% {
transform: rotate(-180deg);
}
50% {
transform: rotate(-180deg);
}
100% {
-webkit-transform: rotate(0deg);
}
}
@-webkit-keyframes loading-right {
0% {
-webkit-transform: rotate(-180deg);
}
50% {
-webkit-transform: rotate(-180deg);
}
100% {
-webkit-transform: rotate(0deg);
}
}
&#13;
<div class="container mt-5">
<div class="row">
<div class="col-3">
<div id="circle-loader-wrap">
<div class="left-wrap">
<div class="loader"></div>
</div>
<div class="right-wrap">
<div class="loader"></div>
</div>
</div>
</div>
</div>
</div>
&#13;
答案 2 :(得分:0)
CSS 动画属性将帮助您反向旋转相同的动画。
//dont care about this code, its just to get the length of shapes to set the dash offset
let shape = document.querySelector('.circle');
let shapeLength= shape.getTotalLength();
console.log(shapeLength);
&#13;
#circle {
width: 300px;
height:300px;
background: #fcfcfc;
}
.text{
fill: red;
text-anchor: middle;
}
#circle{
animation: circleMove 5s ease-out infinite both alternate;
}
.circle{
fill: none;
stroke: red;
stroke-width: 5px;
stroke-dasharray:251;
animation: circleMove 5s ease-in 1 alternate;
}
@keyframes circleMove{
from{
stroke-dashoffset: 251;
}
to{
stroke-dashoffset: 0;
}
}
&#13;
<!-- Learn about this code on MDN: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/circle -->
<div id="circle">
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<circle class='circle' cx="50" cy="50" r="40"/>
<text class='text' x="50" y="50" font-family="Verdana" font-size="11" ></text>
</svg>
</div>
&#13;