返回

萤火虫起舞,代码点亮夏夜之美

前端

在繁星点点之下,一抹抹灵动的光芒划过夜空,那是夏夜中精灵般的萤火虫。虽然城市中的喧嚣掩盖了它们的光辉,但我们依然可以在代码的世界里重现这份浪漫,用技术点亮夏夜之美。

CSS 的画布与 JavaScript 的画笔

实现萤火虫效果,首先需要创建画布和画笔。在 CSS 中,我们可以用 canvas 标签创建画布,而 JavaScript 则提供了一系列方法来操控画布上的元素。

const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");

萤火虫的诞生与移动

每一只萤火虫都是一个动态的光点,我们需要用 JavaScript 为它们赋予生命。通过 setInterval 定时器,我们可以让萤火虫在画布上随机移动。

function createFirefly() {
  return {
    x: Math.random() * canvas.width,
    y: Math.random() * canvas.height,
    speed: Math.random() * 2 + 1,
    radius: Math.random() * 2 + 1,
    color: "rgba(255, 255, 255, 0.7)",
  };
}

function moveFirefly(firefly) {
  firefly.x += firefly.speed * Math.cos(firefly.angle);
  firefly.y += firefly.speed * Math.sin(firefly.angle);

  if (firefly.x > canvas.width || firefly.x < 0) {
    firefly.angle = Math.PI - firefly.angle;
  }
  if (firefly.y > canvas.height || firefly.y < 0) {
    firefly.angle = -firefly.angle;
  }
}

光点的闪烁与消隐

为了让萤火虫的效果更逼真,我们需要模拟光点的闪烁和消隐。可以通过调整 rgba 颜色值的透明度来实现。

function drawFirefly(firefly) {
  ctx.beginPath();
  ctx.arc(firefly.x, firefly.y, firefly.radius, 0, 2 * Math.PI, false);
  ctx.fillStyle = firefly.color;
  ctx.fill();
}

汇聚萤火虫,打造代码艺术

最后,我们将这些单个的萤火虫汇聚成一个群体,营造出漫天飞舞的壮观景象。

const fireflies = [];

for (let i = 0; i < 50; i++) {
  fireflies.push(createFirefly());
}

function draw() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  fireflies.forEach((firefly) => {
    moveFirefly(firefly);
    drawFirefly(firefly);
  });
  requestAnimationFrame(draw);
}

代码的舞动,夏夜的幻梦

随着代码的舞动,画布上出现了点点闪烁的光点,仿佛夏夜的萤火虫正在自由自在地飞翔。它们忽明忽暗,时而汇聚,时而散开,在代码的脉动中,夏夜的幻梦徐徐展开。

从这行行代码中,我们不光领略到了编程的魅力,更感受到了代码作为一种艺术表达形式的无限可能。技术不再是冷冰冰的工具,而是一支灵动的画笔,让我们在虚拟的世界中描绘自己的想象和创造。