官方微信 手机客户端

代码测试

951323 发表于 2021-11-11 13:27:15 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 951323 于 2021-11-11 18:47 编辑
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="utf-8">
  5.     <title>流星雨</title>
  6.     <script>
  7.         var context;
  8.         var arr = new Array();
  9.         var starCount = 800;
  10.         var rains = new Array();
  11.         var rainCount = 20;

  12.         function init() {
  13.             var stars = document.getElementById("stars");
  14.             windowWidth = window.innerWidth; //当前的窗口的高度
  15.             stars.width = windowWidth;
  16.             stars.height = window.innerHeight;
  17.             context = stars.getContext("2d");
  18.         }

  19.         //创建一个星星对象
  20.         var Star = function () {
  21.             this.x = windowWidth * Math.random();//横坐标
  22.             this.y = 5000 * Math.random();//纵坐标
  23.             this.text = ".";//文本
  24.             this.color = "white";//颜色
  25.             this.getColor = function () {
  26.                 var _r = Math.random();
  27.                 if (_r < 0.5) {
  28.                     this.color = "#333";
  29.                 } else {
  30.                     this.color = "white";
  31.                 }
  32.             }
  33. //初始化
  34.             this.init = function () {
  35.                 this.getColor();
  36.             }
  37. //绘制
  38.             this.draw = function () {
  39.                 context.fillStyle = this.color;
  40.                 context.fillText(this.text, this.x, this.y);
  41.             }
  42.         }

  43.         //画月亮
  44.         function drawMoon() {
  45.             var moon = new Image();
  46.             moon.src = "./images/moon.jpg"
  47.             context.drawImage(moon, -5, -10);
  48.         }

  49.         //页面加载的时候
  50.         window.onload = function () {
  51.             init();
  52. //画星星
  53.             for (var i = 0; i < starCount; i++) {
  54.                 var star = new Star();
  55.                 star.init();
  56.                 star.draw();
  57.                 arr.push(star);
  58.             }
  59. //画流星
  60.             for (var i = 0; i < rainCount; i++) {
  61.                 var rain = new MeteorRain();
  62.                 rain.init();
  63.                 rain.draw();
  64.                 rains.push(rain);
  65.             }
  66.             drawMoon();//绘制月亮
  67.             playStars();//绘制闪动的星星
  68.             playRains();//绘制流星

  69.         }

  70.         //星星闪起来
  71.         function playStars() {
  72.             for (var n = 0; n < starCount; n++) {
  73.                 arr[n].getColor();
  74.                 arr[n].draw();
  75.             }

  76.             setTimeout("playStars()", 100);
  77.         }

  78.         /*流星雨开始*/
  79.         var MeteorRain = function () {
  80.             this.x = -1;
  81.             this.y = -1;
  82.             this.length = -1;//长度
  83.             this.angle = 30; //倾斜角度
  84.             this.width = -1;//宽度
  85.             this.height = -1;//高度
  86.             this.speed = 1;//速度
  87.             this.offset_x = -1;//横轴移动偏移量
  88.             this.offset_y = -1;//纵轴移动偏移量
  89.             this.alpha = 1; //透明度
  90.             this.color1 = "";//流星的色彩
  91.             this.color2 = ""; //流星的色彩
  92.             /****************初始化函数********************/
  93.             this.init = function () //初始化
  94.             {
  95.                 this.getPos();
  96.                 this.alpha = 1;//透明度
  97.                 this.getRandomColor();
  98. //最小长度,最大长度
  99.                 var x = Math.random() * 80 + 150;
  100.                 this.length = Math.ceil(x);
  101. // x = Math.random()*10+30;
  102.                 this.angle = 30; //流星倾斜角
  103.                 x = Math.random() + 0.5;
  104.                 this.speed = Math.ceil(x); //流星的速度
  105.                 var cos = Math.cos(this.angle * 3.14 / 180);
  106.                 var sin = Math.sin(this.angle * 3.14 / 180);
  107.                 this.width = this.length * cos; //流星所占宽度
  108.                 this.height = this.length * sin;//流星所占高度
  109.                 this.offset_x = this.speed * cos;
  110.                 this.offset_y = this.speed * sin;
  111.             }
  112.             /**************获取随机颜色函数*****************/
  113.             this.getRandomColor = function () {
  114.                 var a = Math.ceil(255 - 240 * Math.random());
  115. //中段颜色
  116.                 this.color1 = "rgba(" + a + "," + a + "," + a + ",1)";
  117. //结束颜色
  118.                 this.color2 = "black";
  119.             }
  120.             /***************重新计算流星坐标的函数******************/
  121.             this.countPos = function ()//
  122.             {
  123. //往左下移动,x减少,y增加
  124.                 this.x = this.x - this.offset_x;
  125.                 this.y = this.y + this.offset_y;
  126.             }
  127.             /*****************获取随机坐标的函数*****************/
  128.             this.getPos = function () //
  129.             {
  130. //横坐标200--1200
  131.                 this.x = Math.random() * window.innerWidth; //窗口高度
  132. //纵坐标小于600
  133.                 this.y = Math.random() * window.innerHeight; //窗口宽度
  134.             }
  135.             /****绘制流星***************************/
  136.             this.draw = function () //绘制一个流星的函数
  137.             {
  138.                 context.save();
  139.                 context.beginPath();
  140.                 context.lineWidth = 1; //宽度
  141.                 context.globalAlpha = this.alpha; //设置透明度
  142. //创建横向渐变颜色,起点坐标至终点坐标
  143.                 var line = context.createLinearGradient(this.x, this.y,
  144.                     this.x + this.width,
  145.                     this.y - this.height);
  146. //分段设置颜色
  147.                 line.addColorStop(0, "white");
  148.                 line.addColorStop(0.3, this.color1);
  149.                 line.addColorStop(0.6, this.color2);
  150.                 context.strokeStyle = line;
  151. //起点
  152.                 context.moveTo(this.x, this.y);
  153. //终点
  154.                 context.lineTo(this.x + this.width, this.y - this.height);
  155.                 context.closePath();
  156.                 context.stroke();
  157.                 context.restore();
  158.             }
  159.             this.move = function () {
  160. //清空流星像素
  161.                 var x = this.x + this.width - this.offset_x;
  162.                 var y = this.y - this.height;
  163.                 context.clearRect(x - 3, y - 3, this.offset_x + 5, this.offset_y + 5);
  164. // context.strokeStyle="red";
  165. // context.strokeRect(x,y-1,this.offset_x+1,this.offset_y+1);
  166. //重新计算位置,往左下移动
  167.                 this.countPos();
  168. //透明度增加
  169.                 this.alpha -= 0.002;
  170. //重绘
  171.                 this.draw();
  172.             }
  173.         }

  174.         //绘制流星
  175.         function playRains() {

  176.             for (var n = 0; n < rainCount; n++) {
  177.                 var rain = rains[n];
  178.                 rain.move();//移动
  179.                 if (rain.y > window.innerHeight) {//超出界限后重来
  180.                     context.clearRect(rain.x, rain.y - rain.height, rain.width, rain.height);
  181.                     rains[n] = new MeteorRain();
  182.                     rains[n].init();
  183.                 }
  184.             }
  185.             setTimeout("playRains()", 2);
  186.         }

  187.         /*流星雨结束*/
  188.     </script>
  189.     <style type="text/css">
  190.         body {
  191.             background-color: black;
  192.         }

  193.         body, html {
  194.             width: 100%;
  195.             height: 100%;
  196.             overflow: hidden;
  197.         }
  198.     </style>
  199. </head>
  200. <body>
  201. <canvas id="stars"></canvas>
  202. </body>
  203. </html>
复制代码
全部回复1 显示全部楼层
951323 发表于 2021-11-11 14:17:38 来自手机 | 显示全部楼层
嘿嘿
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

楼主

中级会员
联系客服 关注微信 下载APP 返回顶部 返回列表