赶紧来许愿:canvas流星雨的背景

赶紧来许愿:canvas流星雨的背景

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8">

        <title>一起来看流星雨</title>

        <script>

 

            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<starCount;i++) {

                    var star = new Star();

                    star.init();

                    star.draw();

                    arr.push(star);

                }

 

                //画流星

                for (var i=0;i<rainCount;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);

}

 

 

  /*流星雨结束*/

        </script>

        <style type="text/css">

            body{

                background-color: black;

            }

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

        </style>

    </head>

    <body>

        <canvas id="stars"></canvas>

    </body>

</html>

需要web前端课程工具和电子书,请进web前端学习部落22 120342833

 


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值