项目中需要动态加载效果,就模仿ant-design-vue的spin加载中效果,使用纯css实现了动态加载效果。
效果图如下:
Demo效果图如下:
css代码如下:
div>.spin{
position: absolute;
top: 0;
left: 0;
z-index: 4;
display: block;
width: 100%;
height: 100%;
}
.spin{
box-sizing: border-box;
margin: 0;
padding: 0;
color: rgba(0,0,0,.65);
font-size: 14px;
font-variant: tabular-nums;
line-height: 1.5;
list-style: none;
font-feature-settings: "tnum";
position: absolute;
display: none;
color: #1890ff;
text-align: center;
vertical-align: middle;
opacity: 0;
transition: transform .3s cubic-bezier(.78,.14,.15,.86);
}
.spin-spinning{
position: static;
display: inline-block;
opacity: 1;
background-color: rgba(0,0,0,.45);
}
.spin .spin-dot {
position: absolute;
top: 50%;
left: 50%;
margin: -10px;
}
.spin-dot-spin {
transform: rotate(45deg);
-webkit-animation: antRotate 1.2s linear infinite;
animation: antRotate 1.2s linear infinite;
}
.spin-dot {
position: relative;
display: inline-block;
font-size: 20px;
width: 1em;
height: 1em;
}
.spin-dot-item:first-child {
top: 0;
left: 0;
}
.spin-dot-item:nth-child(2) {
top: 0;
right: 0;
-webkit-animation-delay: .4s;
animation-delay: .4s;
}
.spin-dot-item:nth-child(3) {
right: 0;
bottom: 0;
-webkit-animation-delay: .8s;
animation-delay: .8s;
}
.spin-dot-item:nth-child(4) {
bottom: 0;
left: 0;
-webkit-animation-delay: 1.2s;
animation-delay: 1.2s;
}
.spin-dot-item {
position: absolute;
display: block;
width: 9px;
height: 9px;
background-color: #1890ff;
border-radius: 100%;
transform: scale(.75);
transform-origin: 50% 50%;
opacity: .3;
-webkit-animation: antSpinMove 1s linear infinite alternate;
animation: antSpinMove 1s linear infinite alternate;
}
@-webkit-keyframes antSpinMove{to{opacity:1}}
@keyframes antSpinMove{to{opacity:1}}
@-webkit-keyframes antRotate{to{transform:rotate(405deg)}}
@keyframes antRotate{to{transform:rotate(405deg)}}
类样式.spin-spinning可控制加载图标的显示隐藏。
HTML代码如下:
<div>
<div class="spin spin-spinning">
<span class="spin-dot spin-dot-spin">
<i class="spin-dot-item"></i>
<i class="spin-dot-item"></i>
<i class="spin-dot-item"></i>
<i class="spin-dot-item"></i>
</span>
</div>
</div>
Demo完整代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
div>.spin{
position: absolute;
top: 0;
left: 0;
z-index: 4;
display: block;
width: 100%;
height: 100%;
}
.spin{
box-sizing: border-box;
margin: 0;
padding: 0;
color: rgba(0,0,0,.65);
font-size: 14px;
font-variant: tabular-nums;
line-height: 1.5;
list-style: none;
font-feature-settings: "tnum";
position: absolute;
display: none;
color: #1890ff;
text-align: center;
vertical-align: middle;
opacity: 0;
transition: transform .3s cubic-bezier(.78,.14,.15,.86);
}
.spin-spinning{
position: static;
display: inline-block;
opacity: 1;
background-color: rgba(0,0,0,.45);
}
.spin .spin-dot {
position: absolute;
top: 50%;
left: 50%;
margin: -10px;
}
.spin-dot-spin {
transform: rotate(45deg);
-webkit-animation: antRotate 1.2s linear infinite;
animation: antRotate 1.2s linear infinite;
}
.spin-dot {
position: relative;
display: inline-block;
font-size: 20px;
width: 1em;
height: 1em;
}
.spin-dot-item:first-child {
top: 0;
left: 0;
}
.spin-dot-item:nth-child(2) {
top: 0;
right: 0;
-webkit-animation-delay: .4s;
animation-delay: .4s;
}
.spin-dot-item:nth-child(3) {
right: 0;
bottom: 0;
-webkit-animation-delay: .8s;
animation-delay: .8s;
}
.spin-dot-item:nth-child(4) {
bottom: 0;
left: 0;
-webkit-animation-delay: 1.2s;
animation-delay: 1.2s;
}
.spin-dot-item {
position: absolute;
display: block;
width: 9px;
height: 9px;
background-color: #1890ff;
border-radius: 100%;
transform: scale(.75);
transform-origin: 50% 50%;
opacity: .3;
-webkit-animation: antSpinMove 1s linear infinite alternate;
animation: antSpinMove 1s linear infinite alternate;
}
@-webkit-keyframes antSpinMove{to{opacity:1}}
@keyframes antSpinMove{to{opacity:1}}
@-webkit-keyframes antRotate{to{transform:rotate(405deg)}}
@keyframes antRotate{to{transform:rotate(405deg)}}
</style>
<title>Document</title>
</head>
<body>
<div>
<div class="spin spin-spinning">
<span class="spin-dot spin-dot-spin">
<i class="spin-dot-item"></i>
<i class="spin-dot-item"></i>
<i class="spin-dot-item"></i>
<i class="spin-dot-item"></i>
</span>
</div>
</div>
<div class="content">
<h1>这是正文</h1>
</div>
</body>
</html>