|
const canvas = document.getElementById("starfield"); |
|
const ctx = canvas.getContext("2d"); |
|
|
|
let stars = []; |
|
|
|
function resizeCanvas() { |
|
canvas.width = window.innerWidth; |
|
canvas.height = window.innerHeight; |
|
} |
|
|
|
function createStars(count) { |
|
stars = []; |
|
for (let i = 0; i < count; i++) { |
|
stars.push({ |
|
x: Math.random() * canvas.width - canvas.width / 2, |
|
y: Math.random() * canvas.height - canvas.height / 2, |
|
z: Math.random() * canvas.width, |
|
}); |
|
} |
|
} |
|
|
|
function moveStars() { |
|
const speed = 4; |
|
for (let i = 0; i < stars.length; i++) { |
|
stars[i].z -= speed; |
|
if (stars[i].z <= 0) { |
|
stars[i].z = canvas.width; |
|
stars[i].x = Math.random() * canvas.width - canvas.width / 2; |
|
stars[i].y = Math.random() * canvas.height - canvas.height / 2; |
|
} |
|
} |
|
} |
|
|
|
function drawStars() { |
|
ctx.fillStyle = "black"; |
|
ctx.fillRect(0, 0, canvas.width, canvas.height); |
|
|
|
ctx.fillStyle = "white"; |
|
for (let i = 0; i < stars.length; i++) { |
|
const k = 128.0 / stars[i].z; |
|
const x = stars[i].x * k + canvas.width / 2; |
|
const y = stars[i].y * k + canvas.height / 2; |
|
|
|
if (x >= 0 && x <= canvas.width && y >= 0 && y <= canvas.height) { |
|
const size = (1 - stars[i].z / canvas.width) * 2; |
|
ctx.beginPath(); |
|
ctx.arc(x, y, size, 0, Math.PI * 2); |
|
ctx.fill(); |
|
} |
|
} |
|
} |
|
|
|
function animate() { |
|
moveStars(); |
|
drawStars(); |
|
requestAnimationFrame(animate); |
|
} |
|
|
|
window.addEventListener("resize", () => { |
|
resizeCanvas(); |
|
createStars(1000); |
|
}); |
|
|
|
|
|
resizeCanvas(); |
|
createStars(1000); |
|
animate(); |
|
|