关闭

跟随鼠标指针移动的小星星——AIGC自动化编程(10)

发表于:2023-11-07 09:40

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:李宁    来源:51Testing软件测试网原创

#
AI
  5.1.2  跟随鼠标指针移动的小星星
  在本节中,我们会实现一个Web版的特效,当鼠标指针在页面上移动时,会有很多彩色的小星星跟着鼠标指针的轨迹移动,并且不断散落,效果如图5-2所示。
图5-2  跟随鼠标指针移动的小星星的效果
  根据要实现的Web特效的功能,可以向ChatGPT提供如下文字。
  使用HTML、CSS和JavaScript实现一个Web特效。页面的背景是黑色的,鼠标指针在页面中移动,有一些彩色的小星星会随着鼠标指针移动,并形成移动轨迹的同时不断洒落。将CSS和JavaScript文件都放到.html文件中。给出完整的实现代码和中文注释。
  如果不想生成多个文件,可以要求ChatGPT将.css文件和JavaScript文件放到.html文件中。
  ChatGPT会根据上面的提示文字给出下面的代码。
  代码位置:src/web/stars.html
  <!DOCTYPE html>
  <html lang="zh">
  <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>星星特效</title>
      <style>
          /* 设置背景颜色为黑色 */
          body, html, #canvas {
              background-color: black;
              margin: 0;
              padding: 0;
              width: 100%;
              height: 100%;
          }
      </style>
  </head>
  <body>
      <!-- 创建一个画布用于绘制星星 -->
      <canvas id="canvas"></canvas>
      <script>
          // 获取画布并设置其大小
          const canvas = document.getElementById("canvas");
          canvas.width = window.innerWidth;
          canvas.height = window.innerHeight;
          const ctx = canvas.getContext("2d");
          // 星星数组
          const stars = [];
          // 创建星星的构造函数
          function Star(x, y, radius, color, velocity) {
              this.x = x;
              this.y = y;
              this.radius = radius;
              this.color = color;
              this.velocity = velocity;
          }
          // 绘制星星
          Star.prototype.draw = function () {
              ctx.beginPath();
              ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false);
              ctx.fillStyle = this.color;
              ctx.fill();
              ctx.closePath();
          }
          // 更新星星的位置
          Star.prototype.update = function () {
              this.y += this.velocity;
              this.draw();
          }
          // 当鼠标指针移动时创建星星
          window.addEventListener("mousemove", (event) => {
              const x = event.clientX;
              const y = event.clientY;
              const radius = Math.random() * 3;
              const color = `rgb(${Math.random() * 255}, ${Math.random() * 255},
                                     ${Math.random() * 255})`;
              const velocity = Math.random() * 3;
              const star = new Star(x, y, radius, color, velocity);
              stars.push(star);
          });
          // 动画函数
          function animate() {
              requestAnimationFrame(animate);
              ctx.clearRect(0, 0, canvas.width, canvas.height);
              // 更新每个星星的位置
              for (let i = 0; i < stars.length; i++) {
                  stars[i].update();
                  if (stars[i].y > canvas.height) {
                      stars.splice(i, 1);
                  }
              }
          }
          // 开始动画
          animate();
      </script>
  </body>
  </html>
  这段代码的主要目的是使用HTML、CSS和JavaScript创建一种Web特效。其中。当鼠标指针在页面上移动时,会产生随机颜色的小星星,并沿着鼠标指针的移动轨迹不断洒落。
  下面详细解释这段代码。
  在HTML结构方面,一个<canvas>元素放置在<body>中。这个<canvas>元素用作绘制星星的画布。
  在CSS样式方面,body、html和#canvas都设置成黑色背景,并且宽度和高度都设置为100%,以确保它们占据整个页面。
  在JavaScript方面,实现的功能如下。
  (1)获取画布并设置其大小来填充整个窗口。另外,获取一个2D渲染上下文,这是一个包含很多画图功能的对象。
  (2)使用stars数组来存储星星对象。
  (3)定义一个Star()构造函数,用于创建具有一定属性的星星对象。这些属性包括x和y坐标、半径、颜色和速度。这个函数还包含两个方法—draw()和update()。draw()方法用于在画布上绘制一个星星,而update()方法用于改变星星的位置。
  (4)通过监听mousemove事件,我们在鼠标指针移动时创建新的星星。对于每颗星星,我们随机生成其半径、颜色和速度,并将它的初始位置设置为鼠标指针的当前位置。创建的星星对象被推送到stars数组中。
  (5)这段代码中有一个名为animate()的函数,它使用requestAnimationFrame()函数来创建一个动画循环。在这个循环中,我们首先清除整个画布,然后遍历stars数组并对每个星星调用update()方法,这会促使星星向下移动。如果星星超出画布的底部,我们就将其从数组中删除。
  (6)调用animate()函数以启动动画循环。
  总体来说,这段代码创建了一个动态的星星效果,其中当用户在页面上移动鼠标指针时,会生成随机颜色的星星,并沿着鼠标指针的轨迹移动并下落。这是通过使用HTML的<canvas>元素,并用JavaScript来动态绘制和更新星星实现的。
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号