实现一个动态的星空特效
要实现一个动态的星空特效,你可以使用HTML的<canvas>
元素和JavaScript。下面是一个简单的示例,展示如何创建一个动态的星空背景:
- HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>动态星空特效</title>
<style>
body, html {
margin: 0;
padding: 0;
overflow: hidden;
width: 100%;
height: 100%;
}
canvas {
background: black;
display: block;
position: absolute;
top: 0;
left: 0;
}
</style>
</head>
<body>
<canvas id="starCanvas"></canvas>
<script src="script.js"></script>
</body>
</html>
- JavaScript (
script.js
文件):
const canvas = document.getElementById('starCanvas');
const ctx = canvas.getContext('2d');
let stars = []; // 存储星星的数组
const numStars = 1000; // 星星的数量
const maxStarSize = 3; // 最大星星大小
const minStarSize = 1; // 最小星星大小
const maxSpeed = 0.05; // 最大速度
const minSpeed = 0.01; // 最小速度
// 设置canvas大小与窗口一致
function resizeCanvas() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
}
// 创建星星对象
function createStar() {
const x = Math.random() * canvas.width;
const y = Math.random() * canvas.height;
const size = Math.random() * (maxStarSize - minStarSize) + minStarSize;
const speed = Math.random() * (maxSpeed - minSpeed) + minSpeed;
return { x, y, size, speed };
}
// 初始化星星
function initStars() {
stars = [];
for (let i = 0; i < numStars; i++) {
stars.push(createStar());
}
}
// 绘制星星
function drawStars() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = 'white';
stars.forEach(star => {
ctx.beginPath();
ctx.arc(star.x, star.y, star.size, 0, Math.PI * 2);
ctx.closePath();
ctx.fill();
});
}
// 更新星星位置
function updateStars() {
stars.forEach(star => {
star.y += star.speed;
if (star.y > canvas.height) {
star.y = 0; // 星星从底部重新出现
}
});
}
// 动画循环
function animate() {
drawStars();
updateStars();
requestAnimationFrame(animate); // 循环调用animate函数
}
// 监听窗口大小变化事件,重新调整canvas大小并初始化星星
window.addEventListener('resize', () => {
resizeCanvas();
initStars(); // 可选,如果你想在窗口大小变化时重新生成星星,可以保留这行代码。
});
// 初始化并执行动画循环
resizeCanvas();
initStars();
animate();
这段代码创建了一个黑色的<canvas>
元素,并在其中动态地绘制了星星。星星从画布底部向上移动,并在移出画布时重新从底部出现,从而创建了一个无限循环的星空动画效果。你可以根据需要调整星星的数量、大小、速度和颜色等参数。