创建一个2023年烟花动画的网页,使用HTML、CSS和JavaScript展现视觉饕餮

在本教程中,我们将使用HTML、CSS和JavaScript创建一场绚烂的烟花动画,以欢庆2023年的到来。我们还将添加一个动态改变颜色的文字和一个版权信息栏。

效果图
在这里插入图片描述

首先,我们从HTML开始:

HTML是我们网页的骨架,我们将在其中放置我们的canvas,文字和版权信息栏。以下是我们的HTML代码:

<!DOCTYPE html>
<html>
<head>
  <title>2023年烟花动画</title>
  <link rel="stylesheet" type="text/css" href="./css/fireworks.css">
  <style>
    /* 修改背景色 */
    body {
      
      
      background-color: #000;
    }

    /* 修改字体 */
    .center-text {
      
      
      font-family: 'Courier New', Courier, monospace;
      font-size: 4em;
      color: white;
      text-shadow: 3px 3px 5px rgba(255, 255, 255, 0.3);
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }

    .footer {
      
      
      position: fixed;
      bottom: 0;
      width: 100%;
      text-align: center;
      color: white;
      background-color: rgba(0, 0, 0, 0.6);  /* 半透明背景 */
      padding: 10px;
      font-size: 1em;
      animation: fadeInOut 5s infinite;  /* CSS 动画 */
      font-family: 'Courier New', Courier, monospace;  /* 修改字体 */
    }

    /* CSS 动画的关键帧 */
    @keyframes fadeInOut {
      
      
      0% {
      
      opacity: 1;}
      50% {
      
      opacity: 0.5;}
      100% {
      
      opacity: 1;}
    }
  </style>
</head>
<body>
  <canvas id="canvas"></canvas>
  
  <div class="center-text">
    <span class="red">2</span>
    <span class="orange">0</span>
    <span class="yellow">2</span>
    <span class="green">3</span>
  </div>

  <!-- 在这里添加版权声明 -->
  <div class="footer">
    苏呆仔专享权限
  </div>

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

在这个HTML文件中,我们创建了一个黑色的背景,一个动态的"2023"文字和一个版权声明栏。

然后,我们进入CSS:

CSS是我们网页的美化层,它定义了网页的样式。下面是我们的CSS代码:

body, canvas {
    
    
  margin: 0;
  padding: 0;
  overflow: hidden;
  width: 100%;
  height: 100%;
  background: #000;
}

.center-text {
    
    
  position: absolute;
  top: 50%;
  left: 50%;
  font-size: 5em;
  transform: translate(-50%, -50%);
  color: white;
  text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
  animation: colorChange 5s infinite;
}

@keyframes colorChange {
    
    
  0% {
    
     color: red; }
  20% {
    
     color: orange; }
  40% {
    
     color: yellow; }
  60% {
    
     color: green; }
  80% {
    
     color: blue; }
  100% {
    
     color: purple; }
}

.red {
    
    
  color: red;
  animation: colorChangeRed 5s infinite;
}

.orange {
    
    
  color: orange;
  animation: colorChangeOrange 5s infinite;
}

.yellow {
    
    
  color: yellow;
  animation: colorChangeYellow 5s infinite;
}

.green {
    
    
  color: green;
  animation: colorChangeGreen 5s infinite;
}

@keyframes colorChangeRed {
    
    
  0% {
    
     color: red; }
  25% {
    
     color: orange; }
  50% {
    
     color: yellow; }
  75% {
    
     color: green; }
  100% {
    
     color: blue; }
}

@keyframes colorChangeOrange {
    
    
  0% {
    
     color: orange; }
  25% {
    
     color: yellow; }
  50% {
    
     color: green; }
  75% {
    
     color: blue; }
  100% {
    
     color: purple; }
}

@keyframes colorChangeYellow {
    
    
  0% {
    
     color: yellow; }
  25% {
    
     color: green; }
  50% {
    
     color: blue; }
  75% {
    
     color: purple; }
  100% {
    
     color: red; }
}

@keyframes colorChangeGreen {
    
    
  0% {
    
     color: green; }
  25% {
    
     color: blue; }
  50% {
    
     color: purple; }
  75% {
    
     color: red; }
  100% {
    
     color: orange; }
}

在这个CSS文件中,我们主要定义了"2023"文字的样式和动画,以及版权声明栏的样式。

最后,我们进入JavaScript:

JavaScript是我们网页的行为层,它定义了网页的动态效果。以下是我们的JavaScript代码:

// 所有烟花的数组
var fireworks = [];

// 烟花的构造函数
function Firework(sx, sy, tx, ty) {
    
    
  this.x = sx;
  this.y = sy;
  this.vx = tx ? ((tx - sx) / 100) : 0;
  this.vy = ty ? ((ty - sy) / 100) : Math.random() * (-5);
  this.alpha = 1; // alpha通道,用于实现烟花消失的效果
  this.color = "hsl(" + (Math.random() * 360) + ", 100%, 50%)"; // 色彩随机
}

// 烟花的绘制方法
Firework.prototype.draw = function (ctx) {
    
    
  ctx.beginPath();
  ctx.arc(this.x, this.y, 3, 0, Math.PI * 2);
  ctx.fillStyle = this.color;
  ctx.globalAlpha = this.alpha; // 设置alpha通道
  ctx.fill();
};

// 获取画布
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

// 设置画布的尺寸
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

// 监听鼠标移动事件
window.onmousemove = function (e) {
    
    
  // 创建一个新的烟花并添加到数组中
  var f = new Firework(e.clientX, e.clientY, null, null);
  fireworks.push(f);
};

// 监听鼠标离开窗口的事件
window.onmouseout = function () {
    
    
  var f = new Firework(Math.random() * window.innerWidth, window.innerHeight, null, null);
  fireworks.push(f);
};

// 动画循环
function loop() {
    
    
  // 清除画布
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.globalAlpha = 1; // 恢复全局alpha

  // 绘制所有的烟花,并更新位置
  for (var i = 0; i < fireworks.length; i++) {
    
    
    fireworks[i].x += fireworks[i].vx;
    fireworks[i].y += fireworks[i].vy;
    fireworks[i].vy += 0.01; // 加速度,模拟重力
    fireworks[i].alpha -= 0.01; // alpha递减,烟花逐渐消失

    // 如果烟花完全消失了,就从数组中删除
    if (fireworks[i].alpha <= 0) {
    
    
      fireworks.splice(i, 1);
      continue;
    }

    fireworks[i].draw(ctx);
  }

  // 通过requestAnimationFrame来进行动画循环
  requestAnimationFrame(loop);
}

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

// 每隔一段时间在底部随机位置创建烟花
setInterval(function () {
    
    
  // 每次创建5个烟花
  for(var i = 0; i < 5; i++){
    
    
    var f = new Firework(Math.random() * window.innerWidth, window.innerHeight, null, null);
    fireworks.push(f);
  }
}, 500); // 修改为每半秒创建一次烟花

这个JavaScript文件主要定义了烟花的行为和动画,包括烟花的生成、移动和消失,以及鼠标移动或离开窗口时生成烟花的逻辑。

猜你喜欢

转载自blog.csdn.net/tuzajun/article/details/131016618