<HTML> <HEAD>…"> <HTML> <HEAD>…">
PixelByte
不畏过往,不惧将来
PixelByte's Blog

HTML彩虹雨

代码+注释

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> colorcoderain </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <style>
  /* 设置页面背景为黑色 */
  body {
    background-color:black;
  }
  /* 设置canvas元素的透明度为0.8 */
  #c {
    opacity:.8;
  }
  /* 设置canvas元素的位置为绝对定位,覆盖整个页面 */
  canvas {
    position:absolute;
    top:0; left:0;
  }
  </style>
 </HEAD>

 <BODY>
 <!-- 创建两个canvas元素,一个用于绘制前景,一个用于背景 -->
 <canvas id=c></canvas>
 <canvas id=bg></canvas>
  <script>
  
      // 初始化变量
      var w = c.width = window.innerWidth,  // canvas宽度设置为窗口宽度
          h = c.height = window.innerHeight,  // canvas高度设置为窗口高度
          ctx = c.getContext('2d'),  // 获取2D绘图上下文
    
          // 参数设置
          total = w,  // 点的总数等于窗口宽度
          accelleration = .05,  // 加速度
    
          // 初始化后的计算
          size = w/total,  // 每个点的宽度
          occupation = w/total,  // 每个点的占用空间
          repaintColor = 'rgba(0, 0, 0, .04)',  // 重绘颜色,用于创建拖尾效果
          colors = [],  // 存储每个点的颜色
          dots = [],  // 存储每个点的Y坐标
          dotsVel = [];  // 存储每个点的速度

      // 设置每个点的颜色和初始Y坐标
      var portion = 360/total;  // 计算每个点的色相增量
      for(var i = 0; i < total; ++i){
        colors[i] = portion * i;  // 设置每个点的颜色
        dots[i] = h;  // 初始Y坐标为窗口高度
        dotsVel[i] = 10;  // 初始速度为10
      }

      // 动画函数
      function anim(){
        window.requestAnimationFrame(anim);  // 请求下一帧动画
        
        // 使用半透明黑色覆盖整个canvas,创建拖尾效果
        ctx.fillStyle = repaintColor;
        ctx.fillRect(0, 0, w, h);
        
        // 遍历所有点,更新它们的位置并绘制
        for(var i = 0; i < total; ++i){
          var currentY = dots[i] - 1;  // 当前Y坐标
          dots[i] += dotsVel[i] += accelleration;  // 更新Y坐标和速度
          
          // 设置点的颜色并绘制
          ctx.fillStyle = 'hsl('+ colors[i] + ', 80%, 50%)';
          ctx.fillRect(occupation * i, currentY, size, dotsVel[i] + 1);
          
          // 如果点超出窗口底部,并且随机数小于0.01,重置点的位置和速度
          if(dots[i] > h && Math.random() < .01){
            dots[i] = dotsVel[i] = 0;
          }
        }
      }

      // 启动动画
      anim();
  </script>
 </BODY>
</HTML>
<SCRIPT Language=VBScript><!--

//--></SCRIPT>

讲解

代码功能概述:

HTML部分:创建了一个基本的HTML页面,包含两个<canvas>元素,一个用于绘制前景,一个用于背景

CSS部分:设置了页面的背景颜色和<canvas>元素的样式。JavaScript部分:实现了动画效果,模拟了彩色雨滴下落的效果。每个点的颜色、位置和速度都被动态更新,并在每一帧中重新绘制

关键点:

  • window.requestAnimationFrame(anim):用于实现动画循环,确保动画流畅运行
  • ctx.fillStyle 和 ctx.fillRect:用于设置颜色和绘制矩形,模拟雨滴的效果
  • hsl():用于生成颜色,通过改变色相(hue)来创建彩虹效果
  • 拖尾效果:通过使用半透明的黑色矩形覆盖整个canvas,创建了雨滴下落时的拖尾效果

如果您觉得我的文章对您有帮助,可考虑支持我!

捐赠支持

感谢您的支持!

发表回复

textsms
account_circle
email

PixelByte's Blog

HTML彩虹雨
代码+注释 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> colorcoderain </TITLE> <META NAME="Generator" CONTENT…
扫描二维码继续阅读
2025-01-29