明白了,阿杰!你想要做一个 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>
🔹 特性说明
- 雪花飘落效果
- 每个雪花随机大小、速度
- 使用
Math.sin和Math.cos实现轻微左右摇摆
- 404 页面显示
- 居中显示
404和提示文本 - 雪花在 Canvas 上方飘落,文字始终可见
- 居中显示
- 响应式窗口
resize自动调整 Canvas 大小
- 可扩展
- 调整
numFlakes控制雪花数量 - 调整
r控制雪花大小 - 可以替换雪花为图片小图标(比如小雪花PNG)
- 调整
发表回复