html5 canvas全屏酷炫星光闪烁3D视差背景动画特效html代码
时间: 2023-08-03 14:27:45 浏览: 351
以下是一个基于 HTML5 Canvas 的全屏酷炫星光闪烁 3D 视差背景动画特效的 HTML 代码:
```html
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Canvas Star Field</title>
<style>
canvas {
background-color: #000;
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
var canvas = document.getElementById('canvas'),
context = canvas.getContext('2d'),
stars = [],
particles = [],
maxStars = 1300,
maxParticles = 100;
// 创建星星
for (var i = 0; i < maxStars; i++) {
stars.push({
x: Math.random() * canvas.width,
y: Math.random() * canvas.height,
radius: Math.random() * 1.5,
depth: Math.random() * 2000 + 500
});
}
// 创建粒子
function emitParticle() {
if (particles.length < maxParticles) {
var particle = {
x: canvas.width / 2,
y: canvas.height / 2,
vx: Math.random() * 2 - 1,
vy: Math.random() * 2 - 1,
radius: Math.random() * 2 + 2,
alpha: Math.random() * 0.5 + 0.5,
life: Math.random() * 200 + 100
};
particles.push(particle);
}
}
// 更新粒子
function updateParticles() {
particles.forEach(function(particle, index) {
particle.x += particle.vx;
particle.y += particle.vy;
particle.life--;
particle.alpha -= 0.01;
if (particle.life <= 0 || particle.alpha <= 0) {
particles.splice(index, 1);
}
});
}
// 绘制星星
function drawStar(star) {
var x = (star.x - canvas.width / 2) * (star.depth / canvas.width),
y = (star.y - canvas.height / 2) * (star.depth / canvas.width),
radius = star.radius * (star.depth / canvas.width);
context.beginPath();
context.arc(x + canvas.width / 2, y + canvas.height / 2, radius, 0, Math.PI * 2);
context.fillStyle = '#fff';
context.fill();
}
// 绘制粒子
function drawParticle(particle) {
context.beginPath();
context.arc(particle.x, particle.y, particle.radius, 0, Math.PI * 2);
context.fillStyle = 'rgba(255, 255, 255, ' + particle.alpha + ')';
context.fill();
}
// 绘制
function draw() {
context.clearRect(0, 0, canvas.width, canvas.height);
// 绘制星星
stars.forEach(function(star) {
drawStar(star);
});
// 绘制粒子
particles.forEach(function(particle) {
drawParticle(particle);
});
}
// 循环
function loop() {
emitParticle();
updateParticles();
draw();
requestAnimationFrame(loop);
}
// 初始化画布
function initCanvas() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
window.addEventListener('resize', function() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
});
}
// 初始化
function init() {
initCanvas();
loop();
}
// 执行初始化
init();
</script>
</body>
</html>
```
这段代码创建了一个全屏的 Canvas 画布,并在其中绘制了星星和粒子。通过调整粒子的数量和大小,以及星星的深度和大小,可以得到不同的效果。
阅读全文