@import '@/uni_modules/lime-style/index.scss'; $loading-color: create-var(loading-color, $primary-color); $loading-size: create-var(loading-size, 40rpx); $loading-text-color: create-var(loading-text-color, $text-color-3); $loading-font-size: create-var(loading-font-size, $font-size); /* #ifndef MP-ALIPAY */ $loading-duration: create-var(loading-duration, 2s); /* #endif */ /* #ifdef MP-ALIPAY */ $loading-duration: create-var(loading-duration, 1s); /* #endif */ /* #ifndef APP-NVUE */ /* #ifndef MP-ALIPAY */ @property --l-loading-start { syntax: ''; initial-value: 1%; inherits: false; } @property --l-loading-end { syntax: ''; initial-value: 1%; inherits: false; } @property --l-left { syntax: ''; initial-value: 1%; inherits: false; } @property --l-loadding-ball-size { syntax: ' | '; // initial-value: 1%; inherits: false; } /* #endif */ :host { display: inline-flex; } /* #endif */ .l-loading { position: relative; // color: #c8c9cc; color: $loading-color; font-size: 0; vertical-align: middle; &--ball{ display: inline-flex; align-items: center; .l-loading { &__ball { position: relative; perspective: calc(var(--l-loadding-ball-size) * 4); transform-style: preserve-3d; // border: 1px solid; &:before{ background-color: $primary-color; left: 0%; // mix-blend-mode: darken; animation-name: l-ball-before; } &:after{ right: 0; background-color: red; // mix-blend-mode: darken; animation-name: l-ball-after; } &:before,&:after{ top: 0; content: ''; position: absolute; // width: 100%; height: 100%; aspect-ratio: 1/1; border-radius: 50%; animation-iteration-count: infinite; animation-delay: -100ms; animation-duration: 900ms; mix-blend-mode: darken; } } } } &--circular { .l-loading { &__circular { display: inline-block; position: relative; /* #ifndef APP-NVUE */ animation: l-rotate $loading-duration linear infinite; vertical-align: middle; &:before { content: ''; display: block; width: 100%; height: 100%; border-radius: 50%; /* #ifndef MP-ALIPAY || APP-VUE */ background-image: conic-gradient( transparent 0%, transparent var(--l-loading-start, 0%), var(--l-loading-color-1, currentColor) var(--l-loading-start, 0%), var(--l-loading-color-2, currentColor) var(--l-loading-end, 0%), transparent var(--l-loading-end, 0%), transparent 100%); /* #endif */ /* #ifdef MP-ALIPAY || APP-VUE */ background-image: conic-gradient( var(--l-loading-color-1, transparent) 0%, var(--l-loading-color-2, currentColor) 100%); /* #endif */ mask: radial-gradient(closest-side, transparent calc(80% - 1px), #fff 80%); -webkit-mask: radial-gradient(closest-side, transparent calc(80% - 1px), #fff 80%); animation: l-circular 2.5s ease-in-out infinite; transform: rotate(90deg); } /* #endif */ } } } &--spinner { .l-loading { &__spinner { position: relative; box-sizing: border-box; width: 100%; height: 100%; max-width: 100%; max-height: 100%; animation-timing-function: steps(12); animation: l-rotate 0.8s linear infinite; } &__dot { position: absolute; top: 0; left: 0; width: 100%; height: 100%; transform: rotate(calc(var(--l-loading-dot, 1) * 30deg)); opacity: calc(var(--l-loading-dot, 1) / 12); &::before { display: block; width: 5rpx; height: 25%; margin: 0 auto; background-color: currentColor; border-radius: 40%; content: ' '; } } } } &__text{ display: inline-block; margin-left: $spacer-xs; color: $loading-text-color; font-size: $loading-font-size; vertical-align: middle; } &.is-vertical { display: inline-flex; flex-direction: column; align-items: center; .l-loading__text { margin: $spacer-tn 0 0; } } &__ball,&__circular,&__spinner { width: $loading-size; height: $loading-size; } } /* #ifndef APP-NVUE */ @keyframes l-circular { 0% { --l-loading-start: 0%; --l-loading-end: 0%; } 50% { --l-loading-start: 0%; --l-loading-end: 100%; } 100% { --l-loading-start: 100%; --l-loading-end: 100%; } } @keyframes l-rotate { to { transform: rotate(1turn) } } @keyframes l-ball-before { 0%{ animation-timing-function: ease-in; } 25% { animation-timing-function: ease-out; --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2); transform: translate3d(var(--l-left), 0, var(--l-loadding-ball-size)); } 50% { --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%))); animation-timing-function:ease-in; transform: translate3d(var(--l-left), 0, 0); } 75% { animation-timing-function: ease-out; --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2); transform: translate3d(var(--l-left), 0, calc(var(--l-loadding-ball-size) * -1)); } } @keyframes l-ball-after { 0%{ animation-timing-function: ease-in; } 25% { animation-timing-function: ease-out; --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2 * -1); transform: translate3d(var(--l-left), 0, calc(var(--l-loadding-ball-size) * -1)); } 50% { animation-timing-function:ease-in; --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) * -1); transform: translate3d(var(--l-left), 0, 0); } 75% { animation-timing-function: ease-out; --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2 * -1); transform: translate3d(var(--l-left), 0, var(--l-loadding-ball-size)); } } /* #endif */