Vue IOS 기본loading
15007 단어 프런트엔드
웹 쪽이든 app 쪽이든 페이지에서 네트워크 자원을 요청하거나 시간이 많이 걸리는 작업을 수행할 때 불러오는 상태를 보여서 더 좋은 사용자 체험을 해야 한다.본고는 주로 Vue를 바탕으로 IOS 기본 Loading 효과의 실현 원리를 설명한다.
효과도
자원 주소
1. 데모 주소(gitee) 2.데모 주소Github 코드 주소
설치하다.
npm i plain-loading -S
import Vue from 'vue'
import PlainLoading from 'plain-loading'
import 'plain-loading/dist/PlainLoading.css'
Vue.use(PlainLoading)
<pl-loading/>
html 원본 코드
<template>
<div class="pl-loading-alpha" :class="[`pl-loading-alpha-color-${color}`]">
<span class="pl-loading-alpha-tag"><span class="pl-loading-tag" v-for="i in [1,2,3,4,5,6,7,8,9,10,11,12]" :key="i">span>span>
div>
template>
scss 소스
.pl-loading-alpha {
display: inline-block;
vertical-align: middle;
$size: plVar(icon-size);
height: $size;
width: $size;
.pl-loading-alpha-tag {
$centerRadius: (0.5*$size)/1.2;
$itemWidth: (0.35*$size)/1.2;
$itemHeight: (0.1*$size)/1.2;
$width: $centerRadius + $itemWidth * 2;
$height: $width;
width: $width;
height: $height;
position: relative;
display: block;
.pl-loading-tag {
display: inline-block;
width: $itemWidth;
height: $itemHeight;
margin-top: $itemHeight / 2 * -1;
margin-left: $centerRadius / 2;
top: 50%;
left: 50%;
position: absolute;
transform-origin: ($centerRadius / 2 * -1) ($itemHeight / 2);
border-radius: 1px;
@for $i from 1 through 12 {
&:nth-child(#{$i}) {
transform: rotate(($i - 1) * 30deg);
animation: pl-loading-alpha-tag 1s linear infinite #{-1 + $i / 12}s;
}
}
@keyframes pl-loading-alpha-tag {
0% {
opacity: 1;
}
@for $i from 1 through 11 {
#{$i / 12 * 100}% {
opacity: 1 - $i / 12;
}
}
100% {
opacity: 1;
}
}
}
}
@include pl-colors(pl-loading-alpha) {
.pl-loading-tag {
background-color: $colorDeep;
}
}
&.pl-loading-alpha-color-white {
.pl-loading-tag {
background-color: white;
}
}
}
해석
@keyframes pl-loading-alpha-tag {
0% {
opacity: 1;
}
@for $i from 1 through 11 {
#{$i / 12 * 100}% {
opacity: 1 - $i / 12;
}
}
100% {
opacity: 1;
}
}
@for $i from 1 through 12 {
&:nth-child(#{$i}) {
transform: rotate(($i - 1) * 30deg);
animation: pl-loading-alpha-tag 1s linear infinite #{-1 + $i / 12}s;
}
}