- BC20270270's blog
bitch2
- 2025-6-14 15:00:56 @
全面升级亮点 ✨
1. 视觉特效全面增强
- 动态光源系统:鼠标移动时产生真实光源效果,照亮周围元素
- 粒子尾迹特效:光标移动时生成彩色粒子轨迹,增强互动反馈
- 涟漪点击效果:点击屏幕产生水波纹扩散效果
- 多层景深设计:气泡层(底层) + 粒子层(中层) + 时间球体(上层)
2. 交互体验升级
- 自定义光标:替换为科幻感光晕光标
- 元素排斥系统:粒子与气泡均会避开光标轨迹
- 元素独立控制:可单独开关粒子/气泡系统
- 球体悬停动画:悬浮球在鼠标悬停时产生放大发光效果
3. 动态内容扩展
- 智慧名言系统:每小时自动更换哲理名言(共6条精选)
- 主题切换动画:色彩过渡添加平滑动画效果
- 动态favicon:使用火箭表情作为浏览器图标
- 赛博朋克主题:新增炫酷橙色赛博主题
4. 视觉设计优化
- 中央球体升级:尺寸增大+发光增强+内发光效果
- 时间文本特效:添加彩虹渐变与文字阴影
- 控制面板美化:添加表情图标+悬停动效+毛玻璃效果
- 气泡多样性:随机大小+颜色+速度的气泡系统
5. 性能优化
- 粒子尾迹自动清理机制
- 粒子排斥计算优化
- 动画使用硬件加速
使用指南 🚀
-
基础操作:
- 移动鼠标:观察粒子/气泡避开光标的效果
- 点击屏幕:产生涟漪扩散动画
- 切换主题:点击底部不同颜色按钮
-
高级控制:
- 点击✨粒子开关:显示/隐藏粒子系统
- 点击💧气泡开关:显示/隐藏气泡背景
- 悬停中央球体:触发放大发光效果
-
彩蛋功能:
- 整点时自动更换哲理名言
- 浏览器标签页显示动态火箭图标
- 赛博主题下气泡呈现橙色调
提示:按F11进入全屏模式可获得最佳体验!此壁纸完全依赖现代浏览器技术,无需任何外部资源。
这个升级版壁纸在视觉效果和交互体验上都有质的飞跃,通过多层动态元素和物理模拟效果,创造了深度沉浸式的数字环境!
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>超时空互动壁纸</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🚀</text></svg>">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
overflow: hidden;
min-height: 100vh;
background: radial-gradient(circle at 20% 30%, #0f0c29, #302b63, #24243e);
background-size: 400% 400%;
animation: gradientBG 15s ease infinite;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
perspective: 1000px;
cursor: none;
}
#particles {
position: absolute;
width: 100%;
height: 100%;
z-index: 1;
}
#bubbles {
position: absolute;
width: 100%;
height: 100%;
z-index: 0;
overflow: hidden;
}
.floating-ball {
position: absolute;
top: 50%;
left: 50%;
width: 320px;
height: 320px;
transform: translate(-50%, -50%);
border-radius: 50%;
background: radial-gradient(circle at 30% 30%, #8e2de2, #4a00e0);
box-shadow:
0 0 100px rgba(142, 45, 226, 0.8),
0 0 180px rgba(74, 0, 224, 0.6),
inset 0 0 30px rgba(255, 255, 255, 0.3);
animation: float 6s ease-in-out infinite;
z-index: 2;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
color: white;
text-align: center;
padding: 30px;
overflow: hidden;
border: 2px solid rgba(255, 255, 255, 0.15);
transition: all 0.5s ease;
backdrop-filter: blur(5px);
}
.floating-ball:hover {
transform: translate(-50%, -50%) scale(1.05);
box-shadow:
0 0 120px rgba(142, 45, 226, 1),
0 0 200px rgba(74, 0, 224, 0.8);
}
.time-display {
font-size: 3.5rem;
font-weight: 700;
margin-bottom: 15px;
text-shadow: 0 0 15px rgba(255, 255, 255, 0.8);
letter-spacing: 3px;
background: linear-gradient(to right, #ff7eee, #7ee8fa);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
filter: drop-shadow(0 0 5px rgba(0, 0, 0, 0.5));
}
.date-display {
font-size: 1.7rem;
opacity: 0.9;
margin-bottom: 25px;
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
}
.quote {
font-size: 1.2rem;
font-style: italic;
max-width: 80%;
opacity: 0.8;
transition: all 0.5s ease;
text-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
}
.controls {
position: fixed;
bottom: 30px;
left: 50%;
transform: translateX(-50%);
z-index: 100;
display: flex;
gap: 15px;
flex-wrap: wrap;
justify-content: center;
max-width: 90%;
}
.control-btn {
background: rgba(255, 255, 255, 0.15);
border: 1px solid rgba(255, 255, 255, 0.25);
color: white;
padding: 10px 25px;
border-radius: 30px;
cursor: pointer;
backdrop-filter: blur(10px);
transition: all 0.3s ease;
font-weight: 500;
display: flex;
align-items: center;
gap: 8px;
}
.control-btn:hover {
background: rgba(255, 255, 255, 0.3);
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
.custom-cursor {
position: fixed;
width: 40px;
height: 40px;
border-radius: 50%;
background: radial-gradient(circle, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0) 70%);
pointer-events: none;
z-index: 9999;
transform: translate(-50%, -50%);
mix-blend-mode: screen;
transition: transform 0.1s ease;
}
.cursor-trail {
position: fixed;
width: 10px;
height: 10px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.5);
pointer-events: none;
z-index: 9998;
transform: translate(-50%, -50%);
mix-blend-mode: screen;
}
.light-source {
position: fixed;
width: 300px;
height: 300px;
border-radius: 50%;
background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 70%);
pointer-events: none;
z-index: -1;
transform: translate(-50%, -50%);
filter: blur(30px);
opacity: 0.7;
}
@keyframes gradientBG {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
@keyframes float {
0% { transform: translate(-50%, -50%) translateY(0) rotate(0deg); }
50% { transform: translate(-50%, -50%) translateY(-20px) rotate(3deg); }
100% { transform: translate(-50%, -50%) translateY(0) rotate(0deg); }
}
.bubble {
position: absolute;
bottom: -100px;
width: 40px;
height: 40px;
background: rgba(255, 255, 255, 0.1);
border-radius: 50%;
animation: rise 15s infinite;
box-shadow: 0 0 15px rgba(255, 255, 255, 0.2);
backdrop-filter: blur(2px);
}
@keyframes rise {
0% {
opacity: 0.3;
transform: translateY(0) rotate(0deg);
}
100% {
opacity: 0;
transform: translateY(-100vh) rotate(360deg);
}
}
.particle-trail {
position: absolute;
width: 8px;
height: 8px;
border-radius: 50%;
pointer-events: none;
z-index: 2;
}
</style>
</head>
<body>
<div id="bubbles"></div>
<div id="particles"></div>
<div class="floating-ball">
<div class="time-display" id="time">00:00:00</div>
<div class="date-display" id="date">2025年6月14日 星期六</div>
<div class="quote" id="quote">宇宙中唯一不变的是变化本身</div>
</div>
<div class="controls">
<div class="control-btn" data-color="purple">
<span>🌌</span> 深空紫
</div>
<div class="control-btn" data-color="cyber">
<span>🤖</span> 赛博橙
</div>
<div class="control-btn" data-color="ocean">
<span>🌊</span> 海洋蓝
</div>
<div class="control-btn" data-color="forest">
<span>🌲</span> 森林绿
</div>
<div class="control-btn" id="particle-btn">
<span>✨</span> 粒子开关
</div>
<div class="control-btn" id="bubble-btn">
<span>💧</span> 气泡开关
</div>
</div>
<div class="custom-cursor"></div>
<div class="light-source"></div>
<script>
// 名言库
const quotes = [
"宇宙中唯一不变的是变化本身",
"代码如诗,逻辑如歌",
"探索是人类的终极使命",
"在数字的海洋中寻找真理",
"科技是未来的画笔,代码是创造的颜料",
"每个像素都是可能的开始"
];
// 粒子系统
let particlesEnabled = true;
let bubblesEnabled = true;
// 创建气泡
function createBubbles() {
const container = document.getElementById('bubbles');
const bubbleCount = 15;
for (let i = 0; i < bubbleCount; i++) {
const bubble = document.createElement('div');
bubble.classList.add('bubble');
// 随机大小和位置
const size = Math.random() * 80 + 20;
bubble.style.width = `${size}px`;
bubble.style.height = `${size}px`;
bubble.style.left = `${Math.random() * 100}%`;
bubble.style.background = `rgba(${Math.floor(Math.random() * 255)}, ${Math.floor(Math.random() * 255)}, ${Math.floor(Math.random() * 255)}, ${Math.random() * 0.2 + 0.05})`;
// 随机动画
const duration = Math.random() * 20 + 10;
const delay = Math.random() * 10;
bubble.style.animation = `rise ${duration}s linear infinite`;
bubble.style.animationDelay = `${delay}s`;
container.appendChild(bubble);
}
}
// 粒子系统创建
function createParticles() {
const container = document.getElementById('particles');
const particleCount = 200;
for (let i = 0; i < particleCount; i++) {
const particle = document.createElement('div');
particle.classList.add('particle');
particle.style.position = 'absolute';
// 随机大小
const size = Math.random() * 4 + 1;
particle.style.width = `${size}px`;
particle.style.height = `${size}px`;
// 随机颜色和形状
const colors = ['#ff7eee', '#7ee8fa', '#80ff72', '#ff9e6d'];
const color = colors[Math.floor(Math.random() * colors.length)];
particle.style.background = color;
particle.style.borderRadius = Math.random() > 0.7 ? '0' : '50%';
particle.style.boxShadow = `0 0 10px ${color}`;
// 随机位置
particle.style.left = `${Math.random() * 100}vw`;
particle.style.top = `${Math.random() * 100}vh`;
// 动画
const duration = 2000 + Math.random() * 5000;
particle.animate(
[
{ transform: 'translateY(0)', opacity: Math.random() },
{ transform: `translateY(${Math.random() > 0.5 ? '-' : ''}${20 + Math.random() * 50}px)`, opacity: Math.random() * 0.5 }
],
{
duration: duration,
iterations: Infinity,
direction: 'alternate'
}
);
container.appendChild(particle);
}
}
// 创建粒子尾迹
function createParticleTrail(x, y, color) {
const trail = document.createElement('div');
trail.classList.add('particle-trail');
trail.style.left = `${x}px`;
trail.style.top = `${y}px`;
trail.style.background = color;
trail.style.boxShadow = `0 0 8px ${color}`;
document.body.appendChild(trail);
// 动画
trail.animate(
[
{ transform: 'scale(1)', opacity: 0.8 },
{ transform: 'scale(0.1)', opacity: 0 }
],
{
duration: 500 + Math.random() * 1000,
easing: 'cubic-bezier(0, 0.55, 0.45, 1)'
}
).onfinish = () => {
trail.remove();
};
}
// 更新时间显示
function updateTime() {
const now = new Date();
const timeElement = document.getElementById('time');
const dateElement = document.getElementById('date');
const quoteElement = document.getElementById('quote');
// 时间格式化
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
timeElement.textContent = `${hours}:${minutes}:${seconds}`;
// 日期格式化
const year = now.getFullYear();
const month = now.getMonth() + 1;
const day = now.getDate();
const weekdays = ['日', '一', '二', '三', '四', '五', '六'];
const weekday = weekdays[now.getDay()];
dateElement.textContent = `${year}年${month}月${day}日 星期${weekday}`;
// 每小时更换一次名言
if (now.getMinutes() === 0 && now.getSeconds() === 0) {
quoteElement.textContent = quotes[Math.floor(Math.random() * quotes.length)];
quoteElement.animate(
[
{ opacity: 0, transform: 'translateY(20px)' },
{ opacity: 1, transform: 'translateY(0)' }
],
{
duration: 1000,
easing: 'ease-out'
}
);
}
}
// 背景颜色切换
function setupColorButtons() {
const buttons = document.querySelectorAll('.control-btn[data-color]');
buttons.forEach(button => {
button.addEventListener('click', () => {
const color = button.getAttribute('data-color');
let gradient;
switch(color) {
case 'cyber':
gradient = 'radial-gradient(circle at 20% 30%, #2a0b45, #ff6b00, #ffa600)';
break;
case 'ocean':
gradient = 'radial-gradient(circle at 20% 30%, #0f2027, #203a43, #2c5364)';
break;
case 'forest':
gradient = 'radial-gradient(circle at 20% 30%, #134E5E, #71B280, #1a5a1a)';
break;
default: // purple
gradient = 'radial-gradient(circle at 20% 30%, #0f0c29, #302b63, #24243e)';
}
document.body.style.background = gradient;
// 添加切换动画
document.body.animate(
[
{ opacity: 0.8 },
{ opacity: 1 }
],
{
duration: 800,
easing: 'ease-in-out'
}
);
});
});
// 粒子开关
document.getElementById('particle-btn').addEventListener('click', () => {
particlesEnabled = !particlesEnabled;
const particles = document.querySelectorAll('#particles .particle');
particles.forEach(p => {
p.style.display = particlesEnabled ? 'block' : 'none';
});
});
// 气泡开关
document.getElementById('bubble-btn').addEventListener('click', () => {
bubblesEnabled = !bubblesEnabled;
const bubbles = document.querySelectorAll('#bubbles .bubble');
bubbles.forEach(b => {
b.style.display = bubblesEnabled ? 'block' : 'none';
});
});
}
// 自定义光标效果
function setupCustomCursor() {
const cursor = document.querySelector('.custom-cursor');
const lightSource = document.querySelector('.light-source');
const trailColors = ['#ff7eee', '#7ee8fa', '#80ff72', '#ff9e6d'];
let lastTrailTime = 0;
document.addEventListener('mousemove', (e) => {
const mouseX = e.clientX;
const mouseY = e.clientY;
// 更新自定义光标位置
cursor.style.left = `${mouseX}px`;
cursor.style.top = `${mouseY}px`;
// 更新光源位置
lightSource.style.left = `${mouseX}px`;
lightSource.style.top = `${mouseY}px`;
// 粒子互动效果
const particles = document.querySelectorAll('#particles .particle');
const bubbles = document.querySelectorAll('#bubbles .bubble');
// 创建粒子尾迹(限制频率)
const now = Date.now();
if (now - lastTrailTime > 50) {
createParticleTrail(
mouseX,
mouseY,
trailColors[Math.floor(Math.random() * trailColors.length)]
);
lastTrailTime = now;
}
// 粒子排斥效果
if (particlesEnabled) {
particles.forEach(particle => {
const rect = particle.getBoundingClientRect();
const particleX = rect.left + rect.width / 2;
const particleY = rect.top + rect.height / 2;
const distance = Math.sqrt(
Math.pow(mouseX - particleX, 2) +
Math.pow(mouseY - particleY, 2)
);
if (distance < 150) {
const force = (150 - distance) / 50;
const angle = Math.atan2(
particleY - mouseY,
particleX - mouseX
);
particle.style.transform = `translate(${Math.cos(angle) * force}px, ${Math.sin(angle) * force}px)`;
}
});
}
// 气泡排斥效果
if (bubblesEnabled) {
bubbles.forEach(bubble => {
const rect = bubble.getBoundingClientRect();
const bubbleX = rect.left + rect.width / 2;
const bubbleY = rect.top + rect.height / 2;
const distance = Math.sqrt(
Math.pow(mouseX - bubbleX, 2) +
Math.pow(mouseY - bubbleY, 2)
);
if (distance < 200) {
const force = (200 - distance) / 80;
const angle = Math.atan2(
bubbleY - mouseY,
bubbleX - mouseX
);
bubble.style.transform = `translate(${Math.cos(angle) * force}px, ${Math.sin(angle) * force}px)`;
}
});
}
});
// 点击效果
document.addEventListener('click', (e) => {
const ripple = document.createElement('div');
ripple.style.position = 'fixed';
ripple.style.left = `${e.clientX}px`;
ripple.style.top = `${e.clientY}px`;
ripple.style.width = '0';
ripple.style.height = '0';
ripple.style.borderRadius = '50%';
ripple.style.background = 'rgba(255, 255, 255, 0.2)';
ripple.style.zIndex = '999';
ripple.style.pointerEvents = 'none';
document.body.appendChild(ripple);
// 涟漪动画
ripple.animate(
[
{ width: '0', height: '0', opacity: 1 },
{ width: '300px', height: '300px', opacity: 0 }
],
{
duration: 800,
easing: 'ease-out'
}
).onfinish = () => {
ripple.remove();
};
});
}
// 初始化
document.addEventListener('DOMContentLoaded', () => {
createBubbles();
createParticles();
updateTime();
setInterval(updateTime, 1000);
setupColorButtons();
setupCustomCursor();
// 初始名言
document.getElementById('quote').textContent = quotes[Math.floor(Math.random() * quotes.length)];
});
</script>
</body>
</html>