HTML实现“流星雨”

1 篇文章 0 订阅
1 篇文章 0 订阅

        流星雨有着浪漫幸福、美好愿望的寓意和象征,当天空中划过一颗颗流星,能够让人想象许多美好的事情,会有一种幸福感,而且许多人认为流星滑过属于进行时,所以流星雨也象征着愿望,流星雨属于宇宙星体碎片,在地球周边进行运动。 流星雨有着浪漫幸福的寓意和象征,出现流星时太空中会出现漫天繁星,此时容易让人回想起以往的美好回忆,让人生出一种幸福感,如果此时和喜欢的人在一起则是一件非常浪漫的事情。  

运行的结果图:

 实际代码:

<!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;
 
        function init() {
            var stars = document.getElementById("stars");
            windowWidth = window.innerWidth; //当前的窗口的高度
            stars.width = windowWidth;
            stars.height = window.innerHeight;
            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>

  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一个简单的HTML和CSS实现流星雨效果的示例代码HTML: ``` <!DOCTYPE html> <html> <head> <title>流星雨效果</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div class="star"></div> <div class="star"></div> <div class="star"></div> <div class="star"></div> <div class="star"></div> <div class="star"></div> <div class="star"></div> <div class="star"></div> <div class="star"></div> <div class="star"></div> </body> </html> ``` CSS: ``` body { background-color: #000; } .star { position: absolute; width: 2px; height: 10px; background-color: #fff; box-shadow: 0 0 2px #fff; animation: shooting-star 1s ease-in-out infinite; } .star:nth-child(1) { top: 20%; left: 10%; animation-delay: 0.5s; } .star:nth-child(2) { top: 50%; left: 20%; animation-delay: 1.5s; } .star:nth-child(3) { top: 80%; left: 30%; animation-delay: 2.5s; } .star:nth-child(4) { top: 10%; left: 40%; animation-delay: 3.5s; } .star:nth-child(5) { top: 40%; left: 50%; animation-delay: 4.5s; } .star:nth-child(6) { top: 70%; left: 60%; animation-delay: 5.5s; } .star:nth-child(7) { top: 25%; left: 70%; animation-delay: 6.5s; } .star:nth-child(8) { top: 60%; left: 80%; animation-delay: 7.5s; } .star:nth-child(9) { top: 90%; left: 90%; animation-delay: 8.5s; } .star:nth-child(10) { top: 15%; left: 80%; animation-delay: 9.5s; } @keyframes shooting-star { 0% { transform: translateX(0) translateY(0); opacity: 1; } 100% { transform: translateX(500px) translateY(500px); opacity: 0; } } ``` 这段代码会在页面上生成10个星星元素,并使用CSS动画实现流星雨效果。每个星星都有不同的起始位置和延迟时间,使得它们看起来像是从不同的方向飞来。动画的关键帧使用transform属性在水平和垂直方向上移动星星元素,并在100%时将其透明度设置为0,使其消失。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值