一起来看流星雨

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;}

代码制作数字流星雨_js代码实现流星雨相关推荐

  1. 代码制作数字流星雨_用C语言编写流星雨程序

    展开全部 数字流星雨代码: //流星雨.cpp:Defines the entry point for the console application. // /// //程序名称:数字流星雨 //最 ...

  2. 代码制作数字流星雨_如何运用html完成流星雨的效果(代码)

    软件安装:装机软件必备包 网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言.公共网关接口.组件等),可以创造出功能强大的网页.因而,超级文本标记语言是万维网(Web)编程的基 ...

  3. python爱心代码制作_Python之——爱心代码参与情人节

    一行代码实现输出爱心图,参考https://zhuanlan.zhihu.com/p/23321351 原理: 1.借助数学函数--((x * 0.05) ** 2 + (y * 0.1) ** 2 ...

  4. OV代码签名数字证书

    代码签名证书和域名SSL证书一样都是数字签名证书,它的主要作用就是对软件开发者将要发行的代码软件进行数字签名服务,从而保护软件代码的完整性,同时也会在客户下载软件代码时对发行者的身份进行说明.没有进行 ...

  5. html制作状态栏数字时钟,html5 canvas制作15种数字时钟样式代码

    特效描述:html5 canvas制作 数字时钟样式.html5 canvas数字时钟代码 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 clockd1_={ "indic ...

  6. HTML5七夕情人节表白网页(流星雨3D旋转相册) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码

    HTML5七夕情人节表白网页❤流星雨3D旋转相册❤ HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白 这是程 ...

  7. html5 桌面时钟,超级实用的html5制作15种数字时钟样式代码

    超级实用的html5制作15种数字时钟样式代码 查看演示 下载资源: 43 次 下载资源 下载积分: 26 积分 基于canvas的15种不同外观时钟js插件 clockd1_={ "ind ...

  8. html制作状态栏数字时钟,超级实用的html5制作15种数字时钟样式代码

    超级实用的html5制作15种数字时钟样式代码 查看演示 下载资源: 43 次 下载资源 下载积分: 26 积分 基于canvas的15种不同外观时钟js插件 clockd1_={ "ind ...

  9. Python实现流星雨特效代码示例

    本文讲述了Python代码示例:实现流星雨特效!具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧,具体如下: 我们先给大家讲个小故事,提一下你们的兴趣:然后我给出论据,得出结论.最后再把 ...

  10. html5语音闹钟代码,HTML5数字时钟之闹钟

    想要在数字时钟时钟上扩展闹钟效果,需要做的有1.要有一个可以编辑设置闹钟响铃时间的界面:2.每秒钟侦听是否到了响铃时间,如果到了响铃时间则弹出提醒并播放响铃音频. HTML 我们使用上篇文章使用jQu ...

最新文章

  1. UiBot带你两分钟看懂RPA是什么
  2. 洛谷——P2626 斐波那契数列(升级版)矩阵
  3. 【Spring注解驱动开发】java工作流引擎框架
  4. python小练习--模拟用户登录,(3次重试机会,登录成功展示登录账号密码)
  5. 图解虚拟机中CentOS安装使用和编程
  6. python抢票_50 个加速包都抢不到车票,还不如这个 Python 抢票神器!
  7. Delphi中的容器类
  8. Codeforces 777E:Hanoi Factory(贪心+栈)
  9. 河南大学计算机组成原理,河南大学计算机组成原理考点
  10. Linux(debian7)错误集锦(二)之安装Gnome报错Failed to start unit user@1000.service
  11. 33、JSONP跨域
  12. 【前端】前端面试题整理
  13. vue 子页面调用父页面的参数_Flutter子组件调用父组件方法修改父组件参数
  14. 该设备或资源(Web代理)未设置为接受端口“7890“上的连接解决方案
  15. 可视化技巧:分类问题中的决策面画法 (直观理解plt.contour的用法)
  16. 【网络安全基础】数字签名原理及应用
  17. 用大数据调控旅游市场
  18. [技术评论]龙芯电脑
  19. 基于Android的学生信息管理大作业
  20. 电脑如何分区重装系统

热门文章

  1. C#常见操作类(一)
  2. JPA结合querydsl使用
  3. 3DMM及eos人脸重建
  4. windows计算器_计算Windows计算器中的错误
  5. IOUtils pom 依赖
  6. 2021年中国研究生数学建模竞赛E题参考思路
  7. 基于Proteus的51单片机超声波测距
  8. python下载付费音乐包_python无损音乐下载器下载
  9. CTF常见的php函数
  10. js JSON转Excel并导出