返回

元宵佳节放飞孔明灯:用Canvas点亮夜空许下心愿

前端

用Canvas飞扬梦想,点亮元宵夜

元宵佳节,又称上元节,是中国传统节日之一。在这一天,人们会赏花灯、吃汤圆、猜灯谜,还有放孔明灯的习俗。孔明灯,又称天灯、许愿灯,是一种古老的传统文化。在元宵节的夜晚,人们将点燃的孔明灯放飞到空中,寄托着美好的愿望。

随着科技的发展,我们也可以用Canvas来制作在线的孔明灯许愿活动。既环保又绿化,还充满着节日气氛。

准备工作

在开始之前,我们需要准备以下材料:

  • HTML文件
  • CSS文件
  • JavaScript文件
  • Canvas元素

HTML文件

<!DOCTYPE html>
<html>
<head>
  
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <canvas id="canvas"></canvas>

  <script src="script.js"></script>
</body>
</html>

CSS文件

#canvas {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

JavaScript文件

// 获取Canvas元素
var canvas = document.getElementById("canvas");

// 设置Canvas的宽高
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

// 获取Canvas的上下文
var ctx = canvas.getContext("2d");

// 设置画布背景色
ctx.fillStyle = "#000";
ctx.fillRect(0, 0, canvas.width, canvas.height);

// 定义孔明灯的形状
var lamp = {
  x: canvas.width / 2,
  y: canvas.height,
  radius: 50,
  vx: 0,
  vy: -1
};

// 定义火焰的形状
var flame = {
  x: lamp.x,
  y: lamp.y - lamp.radius,
  radius: 10,
  vx: 0,
  vy: -2
};

// 绘制孔明灯
function drawLamp() {
  // 绘制圆形
  ctx.beginPath();
  ctx.arc(lamp.x, lamp.y, lamp.radius, 0, 2 * Math.PI);
  ctx.fillStyle = "#FF9900";
  ctx.fill();

  // 绘制十字线
  ctx.beginPath();
  ctx.moveTo(lamp.x - lamp.radius / 2, lamp.y);
  ctx.lineTo(lamp.x + lamp.radius / 2, lamp.y);
  ctx.moveTo(lamp.x, lamp.y - lamp.radius / 2);
  ctx.lineTo(lamp.x, lamp.y + lamp.radius / 2);
  ctx.strokeStyle = "#000";
  ctx.stroke();
}

// 绘制火焰
function drawFlame() {
  // 绘制圆形
  ctx.beginPath();
  ctx.arc(flame.x, flame.y, flame.radius, 0, 2 * Math.PI);
  ctx.fillStyle = "#FFD700";
  ctx.fill();
}

// 更新孔明灯的位置
function updateLamp() {
  // 更新速度
  lamp.vx += 0.01;
  lamp.vy += 0.01;

  // 更新位置
  lamp.x += lamp.vx;
  lamp.y += lamp.vy;

  // 判断是否超出边界
  if (lamp.x < 0 || lamp.x > canvas.width) {
    lamp.vx = -lamp.vx;
  }

  if (lamp.y < 0 || lamp.y > canvas.height) {
    lamp.vy = -lamp.vy;
  }
}

// 更新火焰的位置
function updateFlame() {
  // 更新速度
  flame.vx += 0.01;
  flame.vy += 0.01;

  // 更新位置
  flame.x += flame.vx;
  flame.y += flame.vy;

  // 判断是否超出边界
  if (flame.x < 0 || flame.x > canvas.width) {
    flame.vx = -flame.vx;
  }

  if (flame.y < 0 || flame.y > canvas.height) {
    flame.vy = -flame.vy;
  }
}

// 动画循环
function animate() {
  // 清空画布
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  // 绘制孔明灯
  drawLamp();

  // 绘制火焰
  drawFlame();

  // 更新孔明灯的位置
  updateLamp();

  // 更新火焰的位置
  updateFlame();

  // 下一帧继续执行动画循环
  requestAnimationFrame(animate);
}

// 开始动画循环
animate();

使用方法

  1. 将HTML、CSS和JavaScript文件保存到本地。
  2. 打开HTML文件,将代码复制到浏览器中。
  3. 点击运行按钮。

效果

运行代码后,你将看到一个在线的孔明灯许愿活动。孔明灯会漂浮在夜空中,火焰会在灯下摇曳。你可以点击屏幕,许下你的美好愿望。

寄语

元宵佳节,让我们用Canvas点亮夜空,许下我们的美好心愿。既环保又绿化,还充满着节日气氛。愿我们的愿望都能实现,我们的生活幸福美满!