明白了,阿杰!你想要做一个 Canvas 雪花效果 + 404 页面,这种效果非常酷,类似“雪花飘落 + 中心显示404信息”。我给你写一个 完整可直接运行的示例


<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>404 雪花页面</title>
<style>
  body, html {
    margin:0;
    padding:0;
    width:100%;
    height:100%;
    overflow:hidden;
    background:#001f3f;
    display:flex;
    justify-content:center;
    align-items:center;
    color:#fff;
    font-family: Arial, sans-serif;
  }
  #canvas {
    position:absolute;
    top:0;
    left:0;
  }
  .message {
    position:relative;
    z-index:1;
    text-align:center;
  }
  .message h1 { font-size:80px; margin:0; }
  .message p { font-size:24px; margin-top:10px; }
</style>
</head>
<body>

<canvas id="canvas"></canvas>
<div class="message">
  <h1>404</h1>
  <p>页面找不到啦~</p>
</div>

<script>
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

let w = canvas.width = window.innerWidth;
let h = canvas.height = window.innerHeight;

// 生成雪花
const numFlakes = 150;
const flakes = [];

for(let i=0;i<numFlakes;i++){
  flakes.push({
    x: Math.random()*w,
    y: Math.random()*h,
    r: Math.random()*4 + 1,   // 雪花半径
    d: Math.random()*numFlakes
  });
}

// 绘制雪花
function drawFlakes(){
  ctx.clearRect(0,0,w,h);
  ctx.fillStyle = "rgba(255,255,255,0.8)";
  ctx.beginPath();
  for(let i=0;i<numFlakes;i++){
    const f = flakes[i];
    ctx.moveTo(f.x,f.y);
    ctx.arc(f.x,f.y,f.r,0,Math.PI*2,true);
  }
  ctx.fill();
  moveFlakes();
}

// 雪花移动
let angle = 0;
function moveFlakes(){
  angle += 0.01;
  for(let i=0;i<numFlakes;i++){
    const f = flakes[i];
    f.y += Math.cos(angle + f.d) + 1 + f.r/2;
    f.x += Math.sin(angle) * 2;

    // 重新回到顶部
    if(f.x > w + 5 || f.x < -5 || f.y > h){
      f.x = Math.random()*w;
      f.y = -10;
    }
  }
}

// 动画循环
function animate(){
  drawFlakes();
  requestAnimationFrame(animate);
}

animate();

// 自适应窗口
window.addEventListener('resize', ()=>{
  w = canvas.width = window.innerWidth;
  h = canvas.height = window.innerHeight;
});
</script>

</body>
</html>


🔹 特性说明

  1. 雪花飘落效果
    • 每个雪花随机大小、速度
    • 使用 Math.sinMath.cos 实现轻微左右摇摆
  2. 404 页面显示
    • 居中显示 404 和提示文本
    • 雪花在 Canvas 上方飘落,文字始终可见
  3. 响应式窗口
    • resize 自动调整 Canvas 大小
  4. 可扩展
    • 调整 numFlakes 控制雪花数量
    • 调整 r 控制雪花大小
    • 可以替换雪花为图片小图标(比如小雪花PNG)