一起来看流星雨

var context;

var arr = new Array();

var starCount = 800;

var rains = new Array();

var rainCount =20;

//初始化画布及context

function init(){

//获取canvas

var stars = document.getElementById("stars");

windowWidth = window.innerWidth; //当前的窗口的高度

stars.width=windowWidth;

stars.height=window.innerHeight;

//获取context

context = stars.getContext("2d");

}

//创建一个星星对象

var Star = function (){

this.x = windowWidth * Math.random();//横坐标

this.y = 5000 * Math.random();//纵坐标

this.text=".";//文本

this.color = "white";//颜色

//产生随机颜色

this.getColor=function(){

var _r = Math.random();

if(_r<0.5){

this.color = "#333";

}else{

this.color = "white";

}

}

//初始化

this.init=function(){

this.getColor();

}

//绘制

this.draw=function(){

context.fillStyle=this.color;

context.fillText(this.text,this.x,this.y);

}

}

//画月亮

function drawMoon(){

var moon = new Image();

moon.src = "./images/moon.jpg"

context.drawImage(moon,-5,-10);

}

//页面加载的时候

window.onload = function() {

init();

//画星星

for (var i=0;i

var star = new Star();

star.init();

star.draw();

arr.push(star);

}

//画流星

for (var i=0;i

var rain = new MeteorRain();

rain.init();

rain.draw();

rains.push(rain);

}

drawMoon();//绘制月亮

playStars();//绘制闪动的星星

playRains();//绘制流星

}

//星星闪起来

function playStars(){

for (var n = 0; n < starCount; n++){

arr[n].getColor();

arr[n].draw();

}

setTimeout("playStars()",100);

}

/*流星雨开始*/

var MeteorRain = function(){

this.x = -1;

this.y = -1;

this.length = -1;//长度

this.angle = 30; //倾斜角度

this.width = -1;//宽度

this.height = -1;//高度

this.speed = 1;//速度

this.offset_x = -1;//横轴移动偏移量

this.offset_y = -1;//纵轴移动偏移量

this.alpha = 1; //透明度

this.color1 = "";//流星的色彩

this.color2 = ""; //流星的色彩

/****************初始化函数********************/

this.init = function () //初始化

{

this.getPos();

this.alpha = 1;//透明度

this.getRandomColor();

//最小长度,最大长度

var x = Math.random() * 80 + 150;

this.length = Math.ceil(x);

// x = Math.random()*10+30;

this.angle = 30; //流星倾斜角

x = Math.random()+0.5;

this.speed = Math.ceil(x); //流星的速度

var cos = Math.cos(this.angle*3.14/180);

var sin = Math.sin(this.angle*3.14/180) ;

this.width = this.length*cos ; //流星所占宽度

this.height = this.length*sin ;//流星所占高度

this.offset_x = this.speed*cos ;

this.offset_y = this.speed*sin;

}

/**************获取随机颜色函数*****************/

this.getRandomColor = function (){

var a = Math.ceil(255-240* Math.random());

//中段颜色

this.color1 = "rgba("+a+","+a+","+a+",1)";

//结束颜色

this.color2 = "black";

}

/***************重新计算流星坐标的函数******************/

this.countPos = function ()//

{

//往左下移动,x减少,y增加

this.x = this.x - this.offset_x;

this.y = this.y + this.offset_y;

}

/*****************获取随机坐标的函数*****************/

this.getPos = function () //

{

//横坐标200--1200

this.x = Math.random() * window.innerWidth; //窗口高度

//纵坐标小于600

this.y = Math.random() * window.innerHeight; //窗口宽度

}

/****绘制流星***************************/

this.draw = function () //绘制一个流星的函数

{

context.save();

context.beginPath();

context.lineWidth = 1; //宽度

context.globalAlpha = this.alpha; //设置透明度

//创建横向渐变颜色,起点坐标至终点坐标

var line = context.createLinearGradient(this.x, this.y,

this.x + this.width,

this.y - this.height);

//分段设置颜色

line.addColorStop(0, "white");

line.addColorStop(0.3, this.color1);

line.addColorStop(0.6, this.color2);

context.strokeStyle = line;

//起点

context.moveTo(this.x, this.y);

//终点

context.lineTo(this.x + this.width, this.y - this.height);

context.closePath();

context.stroke();

context.restore();

}

this.move = function(){

//清空流星像素

var x = this.x+this.width-this.offset_x;

var y = this.y-this.height;

context.clearRect(x-3,y-3,this.offset_x+5,this.offset_y+5);

// context.strokeStyle="red";

// context.strokeRect(x,y-1,this.offset_x+1,this.offset_y+1);

//重新计算位置,往左下移动

this.countPos();

//透明度增加

this.alpha -= 0.002;

//重绘

this.draw();

}

}

//绘制流星

function playRains(){

for (var n = 0; n < rainCount; n++){

var rain = rains[n];

rain.move();//移动

if(rain.y>window.innerHeight){//超出界限后重来

context.clearRect(rain.x,rain.y-rain.height,rain.width,rain.height);

rains[n] = new MeteorRain();

rains[n].init();

}

}

setTimeout("playRains()",2);

}

/*流星雨结束*/

body{

background-color: black;

}

body,html{width:100%;height:100%;overflow:hidden;}

java+代码实现+流星雨,js代码实现流星雨 - osc_zls6dx9i的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. python灰色关联度分析代码_灰色关联分析法步骤 - osc_uwnmtz9n的个人空间 - OSCHINA - 中文开源技术交流社区...

    https://wenku.baidu.com/view/dc356290af1ffc4fff47ac0d.html?rec_flag=default&sxts=1538121950212 利 ...

  2. java记录类加载的个数_java类加载过程 - audience_1的个人空间 - OSCHINA - 中文开源技术交流社区...

    java类加载过程: 在我们代码中,一般就一个new的方法,就能够创建一个java的对象类,但在java虚拟机中 1:首先,我们需要判断该类是否已经在方法区中的常量池中有一个类的符号的引用存在,如果该 ...

  3. java的Teacher类_java类的继承 - osc_tauwfamo的个人空间 - OSCHINA - 中文开源技术交流社区...

    类的继承是类的一个重要概念,通过类的继承子类可以继承父类的属性和方法,提高代码的复用性. eg: //** *创建一个父类Teacher,父类有两个属性name,age,两个方法sleep(),tea ...

  4. java连连看项目汇报_java连连看小项目 - osc_x4wlt5vu的个人空间 - OSCHINA - 中文开源技术交流社区...

    /* *本人也是刚入门,希望各位多多指教 *该项目主要代码在于连线 *1.2个连线没有拐弯 *2.2个连线有一个拐弯 *3.2个连线有2个拐弯 *采用递归算法 */ package llk; impo ...

  5. java数组输出是地址_java数组输出 - SuperPcf的个人空间 - OSCHINA - 中文开源技术交流社区...

    java数组输出 输出一个数组中的元素,我们通常用for循环来做,比如: [java] view plaincopy在CODE上查看代码片派生到我的代码片 package test; public c ...

  6. java网络编程 听_java网络编程 - 亲亲媛的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.TCP/UDP,Socket,Http,Ftp简介 1.TCP/IP是个协议组(主要解决数据如何在网络中传输),可分为三个层次:网络层.传输层和应用层: 网络层:IP协议(支持网间互联的数据报协议 ...

  7. java io流拒绝访问_JAVA IO流 - 张宏良的个人空间 - OSCHINA - 中文开源技术交流社区...

    IO流 一.File类的使用 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身 ...

  8. Java位语句_卫语句 - 宿小帅的个人空间 - OSCHINA - 中文开源技术交流社区

    1.使用卫语句取代嵌套表达式 函数中的条件逻辑使人难以看清正常的执行途径.使用卫语句表现所有特殊情况. 动机:条件表达式通常有2种表现形式.第一:所有分支都属于正常行为.第二:条件表达式提供的答案中只 ...

  9. 队列Java舞会_stl之队列(舞会) - osc_706v6usl的个人空间 - OSCHINA - 中文开源技术交流社区...

    蒟蒻第一次发题解,有不足的还希望大牛指出. [2018冬令营队列]舞会 题目描述 假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队.跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴,每跳完 ...

最新文章

  1. 那个博士生以死控告的教授,被ACM撤销了会员资格
  2. 交互式计算机图形学总结:第一章 图形系统和模型
  3. python request下载文件_Python3.4.3使用urllib.request下载文件带进度显示
  4. java 运行环境测试_java – 在多个环境中执行JUnit测试的配置
  5. [转]给控件做数字签名
  6. (转)iOS编程高性能之路-自动化编译脚本(1)
  7. 为CListBox加上智能水平滚动条
  8. 10个奇葩的代码注释,笑出声!
  9. vision transformer(viT)教学视频【通俗易懂】
  10. SpringBoot实战教程(3)| 整合Thymeleaf
  11. springboot中application.yml 使用数组
  12. Solr常用查询语法笔记
  13. ansible 小试身手
  14. 数据驱动安全:数据安全分析、可视化和仪表盘》一3.6 本章小结
  15. Java对象转Map
  16. atto软件测试速度,基于ATTO的传输速度VS文件大小测试
  17. Lvs之NAT、DR、TUN三种模式的应用配置案例
  18. 总体、样本、样本的抽样分布
  19. 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】09_防刷限流技术
  20. 一些关于芯片烧录的心得

热门文章

  1. 企业如何实现OA办公系统的最大化应用价值?
  2. 常见笔记本BIOS启动键总结( 超级详细 ! ! ! )
  3. js 正则替换非数字的字符的几种情况
  4. 测量地球半径的古希腊方法
  5. html网页标签用法
  6. 王国栋青岛大学计算机学院,王国栋
  7. 撷半盏时光,叙岁月无恙。
  8. open-set recognition(OSR)开集识别的一些思考(二)
  9. 【面试】中科院北京某所公司——中科晶上一面
  10. 团队软件库_if 我是前端团队 Leader,怎么制定前端协作规范?