<!DOCTYPE html>
<html>
<head>
<style>
:root {
--physics-mass: 1.2;
--physics-bounce: 0.86;
--color-sequence: #FF3366, #FF9933, #FFCC00, #33CC33, #0099FF, #9933FF;
--particle-lifecycle: 1800ms;
}
.quantum-loader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.98);
display: grid;
place-items: center;
overflow: hidden;
}
.quantum-text {
font: 900 3rem/1 'SF Pro Display', sans-serif;
background: linear-gradient(90deg, var(--color-sequence));
background-clip: text;
-webkit-background-clip: text;
color: transparent;
animation: quantum-pulse 2s ease-in-out infinite;
filter: url(#quantum-glow);
}
.quantum-orbit {
display: flex;
gap: 2rem;
margin-top: 4rem;
perspective: 1000px;
}
.quantum-particle {
width: 32px;
height: 32px;
border-radius: 50%;
position: relative;
transform-style: preserve-3d;
background: radial-gradient(
circle at 65% 35%,
rgba(255,255,255,0.95),
rgba(255,255,255,0.3)
);
}
.quantum-particle::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
background: conic-gradient(var(--color-sequence));
mix-blend-mode: multiply;
}
@keyframes quantum-pulse {
0%, 100% { opacity: 0.9; transform: scale(1); }
50% { opacity: 1; transform: scale(1.05); }
}
/* 物理模拟滤镜 */
<svg style="position:absolute">
<filter id="quantum-glow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="6" result="glow"/>
<feComposite in="glow" in2="SourceGraphic" operator="over"/>
</filter>
</svg>
</style>
</head>
<body>
<div class="quantum-loader">
<div class="quantum-text">江枫正在修复此界面呢</div>
<div class="quantum-orbit">
<div class="quantum-particle"></div>
<div class="quantum-particle"></div>
<div class="quantum-particle"></div>
<div class="quantum-particle"></div>
<div class="quantum-particle"></div>
<div class="quantum-particle"></div>
</div>
</div>
<script>
class QuantumAnimator {
constructor() {
this.particles = Array.from(document.querySelectorAll('.quantum-particle'))
this.animate()
}
animate() {
const physicsParams = {
mass: parseFloat(getComputedStyle(document.documentElement)
.getPropertyValue('--physics-mass').trim()),
bounce: parseFloat(getComputedStyle(document.documentElement)
.getPropertyValue('--physics-bounce').trim()),
airResistance: 0.98
}
this.particles.forEach((particle, index) => {
const delay = index * 100
particle.animate([
{ transform: 'translateY(0) rotateX(0) scale(1)' },
{
transform: `translateY(-80px) rotateX(${360 * physicsParams.mass}deg) scale(1.2)`,
offset: 0.45,
easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)'
},
{
transform: 'translateY(0) rotateX(720deg) scale(1)',
offset: 1,
easing: 'cubic-bezier(0.55, 0.085, 0.68, 0.53)'
}
], {
duration: 1800 * physicsParams.mass,
delay: delay,
iterations: Infinity
})
})
}
}
// 启动动画系统
new QuantumAnimator()
// 性能监控
const perfObserver = new PerformanceObserver(list => {
const frameDurations = list.getEntries()
if(frameDurations.some(entry => entry.duration > 16.67)) {
console.warn('帧率下降警告,自动降级动画质量')
document.documentElement.style.setProperty('--physics-mass', '1.0')
}
})
perfObserver.observe({ entryTypes: ['frame'] })
</script>
</body>
</html>
index.html