教培参考
教育培训行业知识型媒体
发布时间: 2024年11月26日 03:37
基于HTML+CSS+JS实现流星雨特效实现,可用于移动开发以及网站背景图,具体代码如下:
- <!doctypehtml>
- <html>
- <head>
- <metacharset="utf-8"/>
- <title>流星雨</title>
- <metaname="keywords"content="关键词,关键字">
- <metaname="description"content="描述信息">
- <style>
- body{
- margin:0;
- overflow:hidden;
- }
- </style>
- </head>
- <body>
- <!--
- <canvas>画布画板画画的本子
- -->
- <canvaswidth=400height=400style="background:#000000;"id="canvas"></canvas>
- <!--
- javascript
- 画笔
- -->
- <script>
- //获取画板
- //doccument当前文档
- //getElement获取一个标签
- //ById通过Id名称的方式
- //var声明一片空间
- //varcanvas声明一片空间的名字叫做canvas
- varcanvas=document.getElementById("canvas");
- //获取画板权限上下文
- varctx=canvas.getContext("2d");
- //让画板的大小等于屏幕的大小
- //获取屏幕对象
- vars=window.screen;
- //获取屏幕的宽度和高度
- varw=s.width;
- varh=s.height;
- //设置画板的大小
- canvas.width=w;
- canvas.height=h;
- //设置文字大小
- varfontSize=14;
- //计算一行有多少个文字取整数向下取整
- varclos=Math.floor(w/fontSize);
- //思考每一个字的坐标
- //创建数组把clos个0(y坐标存储起来)
- vardrops=[];
- varstr="qwertyuiopasdfghjklzxcvbnm";
- //往数组里面添加clos个0
- for(vari=0;i<clos;i++){
- drops.push(0);
- }
- //绘制文字
- functiondrawString(){
- //给矩形设置填充色
- ctx.fillStyle="rgba(0,0,0,0.05)"
- //绘制一个矩形
- ctx.fillRect(0,0,w,h);
- //添加文字样式
- ctx.font="600"+fontSize+"px微软雅黑";
- //设置文字颜色
- ctx.fillStyle="#00ff00";
- for(vari=0;i<clos;i++){
- //x坐标
- varx=i*fontSize;
- //y坐标
- vary=drops[i]*fontSize;
- //设置绘制文字
- ctx.fillText(str[Math.floor(Math.random()*str.length)],x,y);
- if(y>h&&Math.random()>0.99){
- drops[i]=0;
- }
- drops[i]++;
- }
- }
- //定义一个定时器,每隔30毫秒执行一次
- setInterval(drawString,30);
- </script>
- </body>
- </html>
- <!DOCTYPEhtml>
- <html>
- <head>
- <metacharset="utf-8">
- <title>流星雨</title>
- <script>
- varcontext;
- vararr=newArray();
- varstarCount=800;
- varrains=newArray();
- varrainCount=20;
- functioninit(){
- varstars=document.getElementById("stars");
- windowWidth=window.innerWidth;//当前的窗口的高度
- stars.width=windowWidth;
- stars.height=window.innerHeight;
- context=stars.getContext("2d");
- }
- //创建一个星星对象
- varStar=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);
- }
- }
- //画月亮
- functiondrawMoon(){
- varmoon=newImage();
- moon.src="./images/moon.jpg"
- context.drawImage(moon,-5,-10);
- }
- //页面加载的时候
- window.onload=function(){
- init();
- //画星星
- for(vari=0;i<starCount;i++){
- varstar=newStar();
- star.init();
- star.draw();
- arr.push(star);
- }
- //画流星
- for(vari=0;i<rainCount;i++){
- varrain=newMeteorRain();
- rain.init();
- rain.draw();
- rains.push(rain);
- }
- drawMoon();//绘制月亮
- playStars();//绘制闪动的星星
- playRains();//绘制流星
- }
- //星星闪起来
- functionplayStars(){
- for(varn=0;n<starCount;n++){
- arr[n].getColor();
- arr[n].draw();
- }
- setTimeout("playStars()",100);
- }
- varMeteorRain=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();
- //最小长度,最大长度
- varx=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);//流星的速度
- varcos=Math.cos(this.angle*3.14/180);
- varsin=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(){
- vara=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;//设置透明度
- //创建横向渐变颜色,起点坐标至终点坐标
- varline=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(){
- //清空流星像素
- varx=this.x+this.width-this.offset_x;
- vary=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();
- }
- }
- //绘制流星
- functionplayRains(){
- for(varn=0;n<rainCount;n++){
- varrain=rains[n];
- rain.move();//移动
- if(rain.y>window.innerHeight){//超出界限后重来
- context.clearRect(rain.x,rain.y-rain.height,rain.width,rain.height);
- rains[n]=newMeteorRain();
- rains[n].init();
- }
- }
- setTimeout("playRains()",2);
- }
- </script>
- <styletype="text/css">
- body{
- background-color:black;
- }
- body,html{
- width:100%;
- height:100%;
- overflow:hidden;
- }
- </style>
- </head>
- <body>
- <canvasid="stars"></canvas>
- </body>
- </html>