oak-general-business/lib/miniprogram_npm/tdesign/loading/loading.less

214 lines
3.4 KiB
Plaintext

@import '../common/style/index.less';
@loading: ~'@{prefix}-loading';
.@{loading} {
display: inline-flex;
align-items: center;
justify-content: center;
&__spinner {
position: relative;
box-sizing: border-box;
width: 100%;
height: 100%;
max-width: 100%;
max-height: 100%;
animation: rotate 0.8s linear infinite;
color: #0052d9;
&.reverse {
animation-name: rotateReverse;
}
&--spinner {
animation-timing-function: steps(12);
.@{loading}__dot {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
&::before {
display: block;
width: 5rpx;
height: 25%;
margin: 0 auto;
background-color: currentColor;
border-radius: 40%;
content: ' ';
}
}
}
&--circular {
.@{loading}__circular {
border-radius: 100%;
width: 100%;
height: 100%;
background: conic-gradient(
from 180deg at 50% 50%,
rgba(255, 255, 255, 0) 0deg,
rgba(255, 255, 255, 0) 60deg,
currentColor 330deg,
rgba(255, 255, 255, 0) 360deg
);
mask: radial-gradient(transparent calc(50% - 1rpx), #fff 50%);
/* stylelint-disable-next-line */
-webkit-mask: radial-gradient(transparent calc(50% - 1rpx), #fff 50%);
}
}
&--dots {
display: flex;
justify-content: space-between;
align-items: center;
animation: none;
.@{loading}__dot {
width: 20%;
height: 20%;
border-radius: 50%;
background-color: currentColor;
animation-duration: 1.8s;
animation-name: dotting;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-fill-mode: both;
}
}
}
&--vertical {
flex-direction: column;
.@{loading}__text {
margin-top: 12rpx;
}
}
&--horizontal {
flex-direction: row;
.@{loading}__text {
margin-left: 16rpx;
}
}
&__refresh-btn {
margin-left: 16rpx;
color: #0052d9;
}
&__bar {
height: 6rpx;
width: 80%;
transition: 0.5s;
background-color: #0052d9;
display: none;
&--static {
display: block;
}
&--loaded {
opacity: 0;
height: 0;
animation: t-bar-loaded 1s ease-out;
}
&--animation {
animation: t-bar 8s linear;
display: block;
}
}
}
@keyframes t-bar {
0% {
width: 0;
}
50% {
width: 70%;
}
100% {
width: 80%;
}
}
@keyframes t-bar-loaded {
0% {
height: 6rpx;
opacity: 1;
width: 90%;
}
50% {
height: 6rpx;
opacity: 1;
width: 100%;
}
100% {
height: 0;
opacity: 0;
width: 100%;
}
}
.generate(@n, @i: 1) when (@i =< @n) {
.@{loading}__dot:nth-of-type(@{i}) {
transform: rotate(@i * 30deg);
opacity: (1 / 12) * (@i - 1);
}
.generate(@n, (@i + 1));
}
.generate(12);
@keyframes rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes rotateReverse {
from {
transform: rotate(360deg);
}
to {
transform: rotate(0deg);
}
}
@keyframes dotting {
0% {
opacity: 0.4;
}
1% {
opacity: 0.8;
}
33% {
opacity: 0.8;
}
34% {
opacity: 0.4;
}
100% {
opacity: 0.4;
}
}