今天發(fā)現(xiàn)一個又好看又好用的流星雨特效


一起來看流星雨

代碼如下:

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; //當(dāng)前的窗口的高度

stars.width=windowWidth;

stars.height=window.innerHeight;

//獲取context

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

}

//創(chuàng)建一個星星對象

var Star = function (){

this.x = windowWidth * Math.random();//橫坐標(biāo)

this.y = 5000 * Math.random();//縱坐標(biāo)

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

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

//產(chǎn)生隨機(jī)顏色

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 = ""; //流星的色彩

/****************初始化函數(shù)********************/

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;

}

/**************獲取隨機(jī)顏色函數(shù)*****************/

this.getRandomColor = function (){

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

//中段顏色

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

//結(jié)束顏色

this.color2 = "black";

}

/***************重新計算流星坐標(biāo)的函數(shù)******************/

this.countPos = function ()//

{

//往左下移動,x減少,y增加

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

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

}

/*****************獲取隨機(jī)坐標(biāo)的函數(shù)*****************/

this.getPos = function () //

{

//橫坐標(biāo)200--1200

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

//縱坐標(biāo)小于600

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

}

/****繪制流星***************************/

this.draw = function () //繪制一個流星的函數(shù)

{

context.save();

context.beginPath();

context.lineWidth = 1; //寬度

context.globalAlpha = this.alpha; //設(shè)置透明度

//創(chuàng)建橫向漸變顏色,起點(diǎn)坐標(biāo)至終點(diǎn)坐標(biāo)

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

this.x + this.width,?

this.y - this.height);

//分段設(shè)置顏色

line.addColorStop(0, "white");

line.addColorStop(0.3, this.color1);

line.addColorStop(0.6, this.color2);

context.strokeStyle = line;

//起點(diǎn)

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

//終點(diǎn)

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

}

/*流星雨結(jié)束*/

body{

background-color: black;

}

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

這是轉(zhuǎn)的一個小哥哥的,原文網(wǎng)址:https://www.cnblogs.com/springcloud/p/8432806.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跌前,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翎卓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摆寄,死亡現(xiàn)場離奇詭異失暴,居然都是意外死亡坯门,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門逗扒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來古戴,“玉大人,你說我怎么就攤上這事缴阎≡是疲” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵蛮拔,是天一觀的道長述暂。 經(jīng)常有香客問我,道長建炫,這世上最難降的妖魔是什么畦韭? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮肛跌,結(jié)果婚禮上艺配,老公的妹妹穿的比我還像新娘。我一直安慰自己衍慎,他們只是感情好转唉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稳捆,像睡著了一般赠法。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乔夯,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天砖织,我揣著相機(jī)與錄音,去河邊找鬼末荐。 笑死侧纯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甲脏。 我是一名探鬼主播眶熬,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼剃幌!你這毒婦竟也來了聋涨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤负乡,失蹤者是張志新(化名)和其女友劉穎牍白,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抖棘,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茂腥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年狸涌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片最岗。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡帕胆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出般渡,到底是詐尸還是另有隱情懒豹,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布驯用,位于F島的核電站脸秽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蝴乔。R本人自食惡果不足惜记餐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薇正。 院中可真熱鬧片酝,春花似錦、人聲如沸挖腰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猴仑。三九已至晦炊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宁脊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工贤姆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留榆苞,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓霞捡,卻偏偏與公主長得像坐漏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碧信,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容