Files
all-personal-resume/个人简历_文旅/loader-animation.css

329 lines
6.3 KiB
CSS

/* 文旅主题加载动画样式 */
/* 加载器容器 */
.page-loader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #0a0e27 0%, #1a2947 50%, #0a0e27 100%);
z-index: 10000;
display: flex;
align-items: center;
justify-content: center;
transition: opacity 0.8s ease, visibility 0.8s ease;
}
.page-loader.fade-out {
opacity: 0;
visibility: hidden;
}
/* 加载内容容器 */
.loader-content {
position: relative;
width: 400px;
height: 400px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
/* 飞机路径动画 */
.plane-container {
position: absolute;
width: 300px;
height: 200px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.plane-path {
width: 100%;
height: 100%;
}
.flight-path {
animation: drawPath 2s ease infinite;
}
@keyframes drawPath {
0% {
stroke-dashoffset: 400;
opacity: 0;
}
50% {
opacity: 0.5;
}
100% {
stroke-dashoffset: 0;
opacity: 0;
}
}
/* 飞机动画 */
.plane {
position: absolute;
font-size: 24px;
color: #00b4d8;
animation: fly 2s ease-in-out infinite;
filter: drop-shadow(0 4px 8px rgba(0, 180, 216, 0.3));
}
.plane i {
display: block;
transform: rotate(-45deg);
}
@keyframes fly {
0% {
left: 10%;
top: 50%;
transform: translate(-50%, -50%) scale(0.8);
opacity: 0;
}
50% {
left: 50%;
top: 25%;
transform: translate(-50%, -50%) scale(1.2);
opacity: 1;
}
100% {
left: 90%;
top: 50%;
transform: translate(-50%, -50%) scale(0.8);
opacity: 0;
}
}
/* 世界地图点动画 */
.map-outline {
position: absolute;
width: 400px;
height: 200px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
opacity: 0.3;
}
.map-outline circle {
animation: pulse 2s ease-in-out infinite;
}
.map-outline circle:nth-child(1) { animation-delay: 0s; }
.map-outline circle:nth-child(2) { animation-delay: 0.2s; }
.map-outline circle:nth-child(3) { animation-delay: 0.4s; }
.map-outline circle:nth-child(4) { animation-delay: 0.6s; }
.map-outline circle:nth-child(5) { animation-delay: 0.8s; }
@keyframes pulse {
0%, 100% {
r: 3;
opacity: 0.3;
}
50% {
r: 8;
opacity: 0.8;
}
}
/* 护照戳动画 */
.passport-stamps {
position: absolute;
width: 100%;
height: 100%;
pointer-events: none;
}
.stamp {
position: absolute;
padding: 8px 20px;
border: 3px solid;
border-radius: 8px;
font-weight: bold;
text-transform: uppercase;
opacity: 0;
transform: rotate(-15deg) scale(1.5);
animation: stampIn 0.6s ease forwards;
}
.stamp-1 {
top: 20%;
left: 15%;
color: #ff6b35;
border-color: #ff6b35;
animation-delay: 0.3s;
}
.stamp-2 {
top: 25%;
right: 20%;
color: #00b4d8;
border-color: #00b4d8;
transform: rotate(10deg) scale(1.5);
animation-delay: 0.6s;
}
.stamp-3 {
bottom: 25%;
left: 50%;
transform: translateX(-50%) rotate(-5deg) scale(1.5);
color: #90e0ef;
border-color: #90e0ef;
animation-delay: 0.9s;
}
@keyframes stampIn {
0% {
opacity: 0;
transform: rotate(-15deg) scale(2) translateY(-20px);
}
50% {
opacity: 1;
transform: rotate(-15deg) scale(0.9) translateY(0);
}
70% {
transform: rotate(-15deg) scale(1.1) translateY(0);
}
100% {
opacity: 0.2;
transform: rotate(-15deg) scale(1) translateY(0);
}
}
/* 加载文字 */
.loader-text {
position: relative;
z-index: 10;
text-align: center;
margin-top: 50px;
}
.loader-text h3 {
color: #fff;
font-size: 28px;
font-weight: 700;
margin-bottom: 15px;
letter-spacing: 2px;
background: linear-gradient(135deg, #00b4d8, #90e0ef, #ff6b35);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
animation: shimmer 2s ease infinite;
}
@keyframes shimmer {
0%, 100% {
opacity: 0.8;
}
50% {
opacity: 1;
}
}
/* 加载点动画 */
.loading-dots {
display: flex;
gap: 8px;
justify-content: center;
}
.loading-dots span {
width: 10px;
height: 10px;
background: #00b4d8;
border-radius: 50%;
animation: dotPulse 1.5s ease infinite;
}
.loading-dots span:nth-child(1) { animation-delay: 0s; }
.loading-dots span:nth-child(2) { animation-delay: 0.2s; }
.loading-dots span:nth-child(3) { animation-delay: 0.4s; }
@keyframes dotPulse {
0%, 80%, 100% {
transform: scale(0.8);
opacity: 0.5;
}
40% {
transform: scale(1.2);
opacity: 1;
}
}
/* 进度条 */
.loader-progress {
position: absolute;
bottom: 80px;
left: 50%;
transform: translateX(-50%);
width: 200px;
height: 4px;
background: rgba(255, 255, 255, 0.1);
border-radius: 2px;
overflow: hidden;
}
.progress-bar {
height: 100%;
background: linear-gradient(90deg, #00b4d8, #90e0ef, #ff6b35);
border-radius: 2px;
animation: progress 2s ease forwards;
}
@keyframes progress {
0% {
width: 0;
}
100% {
width: 100%;
}
}
/* 响应式设计 */
@media (max-width: 768px) {
.loader-content {
width: 300px;
height: 300px;
}
.plane-container {
width: 250px;
height: 150px;
}
.map-outline {
width: 300px;
height: 150px;
}
.loader-text h3 {
font-size: 24px;
}
.stamp {
font-size: 12px;
padding: 6px 15px;
}
.loader-progress {
width: 150px;
bottom: 60px;
}
}
/* 快速加载模式 */
.page-loader.quick-load .progress-bar {
animation-duration: 0.8s;
}
.page-loader.quick-load .plane {
animation-duration: 1s;
}
.page-loader.quick-load .stamp {
animation-duration: 0.3s;
}