粒子多色呼吸动态导航页HTML源码

粒子多色呼吸动态导航页HTML源码

在当今的网页设计中,动态效果和视觉吸引力已成为提升用户体验的关键因素。今天我要分享的是一个集成了粒子效果、多色呼吸渐变和动态头像的现代化导航页HTML源码,非常适合用作个人主页、博客入口或项目展示页面。

图片[1]-粒子多色呼吸动态导航页HTML源码-QQ沐编程

一、设计理念与特色

这个导航页的设计理念是“动静结合,视觉呼吸”,通过以下几个特色功能实现:

1. 多层次背景系统

  • 粒子动态层:使用Canvas绘制的白色粒子随机运动
  • 渐变呼吸层:四色渐变背景实现平滑的颜色过渡动画
  • 卡片彩虹层:主卡片背景采用五色渐变循环

2. 方头动态头像

  • 正方形头像框搭配半透明白色边框
  • 呼吸与摆动结合的复合动画效果
  • 四个关键帧形成流畅的视觉反馈

3. 响应式设计

  • 支持移动端适配
  • 卡片宽度和按钮大小随屏幕尺寸调整

二、核心代码解析

1. HTML结构

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>秋风-QQ沐编程</title>
<!-- 样式部分 -->
<!-- JavaScript部分 -->
</head>
<body>
<div class="gradient-bg"></div>
<canvas id="particles"></canvas>

<div class="box">
  <div class="logo"><img src="https://www.qqmu.com/favicon.png" alt="QQ沐编程"></div>
  <h1>QQ沐编程‑资源分享</h1>
  <p>源码 / 脚本 / 工具<br>专注于高质量资源分享</p>

  <div class="button-row">
    <a id="mainBtn" class="btn main" href="#">进入博客</a>
    <a id="backupBtn" class="btn alt" href="#">备用网址</a>
    <a class="btn tg" href="https://www.juming.com/t/33210x2a49c4" target="_blank">域名抢注</a>
  </div>
</div>

<script>
// JavaScript代码
</script>
</body>
</html>

2. CSS动画效果详解

背景呼吸动画

@keyframes breathe{
  0%{background-position:0% 50%;}
  25%{background-position:50% 50%;}
  50%{background-position:100% 50%;}
  75%{background-position:50% 50%;}
  100%{background-position:0% 50%;}
}

这个动画让背景渐变色从左到右再到左循环移动,创造出呼吸般的效果。

头像复合动画

@keyframes logo-breathe-swing {
  0%   { transform: scale(1) rotate(-8deg); }
  25%  { transform: scale(1.04) rotate(-4deg); }
  50%  { transform: scale(1.08) rotate(0deg); }
  75%  { transform: scale(1.04) rotate(4deg); }
  100% { transform: scale(1) rotate(8deg); }
}

结合了缩放(scale)和旋转(rotate)两个变换,形成自然的摆动和呼吸效果。

3. 粒子系统实现

// 粒子效果
const canvas = document.getElementById('particles');
const ctx = canvas.getContext('2d');
let w = canvas.width = window.innerWidth;
let h = canvas.height = window.innerHeight;

// 创建粒子数组
let particles = [];
for(let i = 0; i < 80; i++){
  particles.push({
    x: Math.random() * w,
    y: Math.random() * h,
    r: Math.random() * 2 + 1, // 半径1-3
    dx: (Math.random() - 0.5) * 0.5, // 水平速度
    dy: (Math.random() - 0.5) * 0.5  // 垂直速度
  });
}

// 动画循环
function draw(){
  ctx.clearRect(0, 0, w, h);
  for(let p of particles){
    ctx.beginPath();
    ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2);
    ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';
    ctx.fill();

    // 更新位置
    p.x += p.dx;
    p.y += p.dy;

    // 边界反弹
    if(p.x < 0 || p.x > w) p.dx *= -1;
    if(p.y < 0 || p.y > h) p.dy *= -1;
  }
  requestAnimationFrame(draw);
}
draw();

三、完整源代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>秋风-QQ沐编程</title>
<style>
html,body{margin:0;padding:0;width:100%;height:100%;overflow:hidden;font-family:Arial,sans-serif;}
body{display:flex;justify-content:center;align-items:center;color:#fff;position:relative;}

canvas#particles{position:absolute;top:0;left:0;width:100%;height:100%;z-index:0;}
.gradient-bg{position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;
background: linear-gradient(45deg, #ffae42, #fff175, #a6e22e, #7fffd4);
background-size: 400% 400%;
animation: breathe 20s ease infinite;}
@keyframes breathe{
0%{background-position:0% 50%;}
25%{background-position:50% 50%;}
50%{background-position:100% 50%;}
75%{background-position:50% 50%;}
100%{background-position:0% 50%;}
}

/* 卡片柔和七彩幻变背景 */
.box{
  position:relative;
  z-index:1;
  background: linear-gradient(45deg, #ffb86c, #fff4a3, #80c0ff, #7fffd4, #c39fff);
  background-size: 500% 500%;
  border-radius:16px;
  border:2px solid rgba(255,255,255,0.3); /* 半透明白边框 */
  padding:30px 25px;
  width:320px;
  text-align:center;
  box-shadow:0 15px 35px rgba(0,0,0,0.35);
  transition: transform .3s, box-shadow .3s;
  animation: box-rainbow 12s linear infinite;
}
.box:hover{
  transform: translateY(-8px);
  box-shadow:0 25px 50px rgba(0,0,0,0.5);
}
@keyframes box-rainbow {
  0% { background-position:0% 50%; }
  50% { background-position:100% 50%; }
  100% { background-position:0% 50%; }
}

/* Logo 正方形 + 边框 + 呼吸 + 摆动 */
.logo img{
  width:72px;
  height:72px;                       
  border:2px solid rgba(255,255,255,0.5); 
  object-fit:cover;
  display:block;
  margin:0 auto 12px;
  transform-origin: center bottom;
  animation: logo-breathe-swing 4s ease-in-out infinite alternate;
}
@keyframes logo-breathe-swing {
  0%   { transform: scale(1) rotate(-8deg); }
  25%  { transform: scale(1.04) rotate(-4deg); }
  50%  { transform: scale(1.08) rotate(0deg); }
  75%  { transform: scale(1.04) rotate(4deg); }
  100% { transform: scale(1) rotate(8deg); }
}

/* 文本 */
h1{font-size:20px;margin:0 0 10px;}
p{font-size:13px;line-height:1.5;opacity:.9;margin-bottom:18px;}

/* 横向按钮 */
.button-row{display:flex;justify-content:center;gap:12px;}
.btn{flex:1;padding:10px 0;text-decoration:none;color:#fff;border-radius:28px;font-weight:600;transition:transform .2s,box-shadow .2s;text-align:center;}
.btn:hover{transform:translateY(-3px);box-shadow:0 6px 18px rgba(0,0,0,0.4);}
.btn.main{background: linear-gradient(135deg,#ffae42,#fff175);}
.btn.alt{background: linear-gradient(135deg,#a6e22e,#7fffd4);}
.btn.tg{background: linear-gradient(135deg,#0088cc,#00acee);}

/* 响应式 */
@media(max-width:480px){.box{width:260px;padding:25px 18px;} .btn{font-size:12px;}}
</style>
</head>
<body>
<div class="gradient-bg"></div>
<canvas id="particles"></canvas>

<div class="box">
  <div class="logo"><img src="https://www.qqmu.com/favicon.png" alt="QQ沐编程"></div>
  <h1>QQ沐编程‑资源分享</h1>
  <p>源码 / 脚本 / 工具<br>专注于高质量资源分享</p>

  <div class="button-row">
    <a id="mainBtn" class="btn main" href="#">进入博客</a>
    <a id="backupBtn" class="btn alt" href="#">备用网址</a>
    <a class="btn tg" href="https://www.juming.com/t/33210x2a49c4" target="_blank">域名抢注</a>
  </div>
</div>

<script>
// 主/备用链接
const MAIN_URL="https://www.qqmu.com";
const BACKUP_URL="https://www.qqmu.com";
document.getElementById("mainBtn").href=MAIN_URL;
document.getElementById("backupBtn").href=BACKUP_URL;

// 粒子效果
const canvas=document.getElementById('particles');
const ctx=canvas.getContext('2d');
let w=canvas.width=window.innerWidth;
let h=canvas.height=window.innerHeight;
window.addEventListener('resize',()=>{w=canvas.width=window.innerWidth;h=canvas.height=window.innerHeight;});
let particles=[];
for(let i=0;i<80;i++){
  particles.push({x:Math.random()*w,y:Math.random()*h,r:Math.random()*2+1,dx:(Math.random()-0.5)*0.5,dy:(Math.random()-0.5)*0.5});
}
function draw(){
  ctx.clearRect(0,0,w,h);
  for(let p of particles){
    ctx.beginPath();
    ctx.arc(p.x,p.y,p.r,0,Math.PI*2);
    ctx.fillStyle='rgba(255,255,255,0.5)';
    ctx.fill();
    p.x+=p.dx;p.y+=p.dy;
    if(p.x<0||p.x>w)p.dx*=-1;
    if(p.y<0||p.y>h)p.dy*=-1;
  }
  requestAnimationFrame(draw);
}
draw();
</script>
</body>
</html>

四、自定义与扩展建议

1. 修改颜色方案

/* 修改背景渐变颜色 */
.gradient-bg {
  background: linear-gradient(45deg, #ff6b6b, #ffa726, #42a5f5, #66bb6a);
}

2. 调整粒子效果

// 增加粒子数量
for(let i=0;i<150;i++){ // 从80增加到150
  particles.push(...);
}

// 修改粒子颜色
ctx.fillStyle='rgba(255, 200, 200, 0.6)'; // 浅粉色半透明

3. 添加点击生成新粒子

canvas.addEventListener('click', (e) => {
  for(let i=0;i<10;i++){
    particles.push({
      x: e.clientX,
      y: e.clientY,
      r: Math.random()*3+1,
      dx: (Math.random()-0.5)*2,
      dy: (Math.random()-0.5)*2
    });
  }
});

4. 添加音频背景音乐

<audio autoplay loop>
  <source src="background-music.mp3" type="audio/mpeg">
</audio>

五、技术亮点总结

  1. 纯前端实现:无需任何后端支持,单HTML文件运行
  2. 性能优化:使用requestAnimationFrame实现流畅动画
  3. 视觉层次:三层背景叠加创造深度感
  4. 交互反馈:按钮悬停效果、卡片悬停浮动
  5. 移动端友好:响应式设计适应不同设备

六、使用场景

  • 个人博客/作品集入口
  • 开源项目展示页
  • 在线简历封面
  • 团队介绍页面
  • 活动宣传单页

这个导航页不仅视觉效果出色,而且代码结构清晰,易于自定义扩展。无论你是前端开发者想要学习Canvas动画,还是普通用户想要一个漂亮的主页,这个源码都是一个很好的起点。

通过简单的修改,你可以快速打造出属于自己的个性化导航页面,展示个人品牌或项目特色。希望这个源码能为你带来灵感!

© 版权声明
THE END
喜欢就支持一下吧
点赞6赞赏 分享