通过html+css+JavaScript编写代码雨

<!DOCTYPE html>

<html>

   

<head>   

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">

    <title>代码雨</title>

    <style type="text/css">

        html, body {

            width: 100%;

            height: 100%;

        }

        body {

            background: #000;

            overflow: hidden;

            margin: 0;

            padding: 0;

        }

    </style>

</head>

   

<body>  

<canvas id="cvs"></canvas>

<script type="text/javascript">

    var cvs = document.getElementById("cvs");

    var ctx = cvs.getContext("2d");

    var cw = cvs.width = document.body.clientWidth;

    var ch = cvs.height = document.body.clientHeight;

    //动画绘制对象

    var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;

    var codeRainArr = []; //代码雨数组

    var cols = parseInt(cw / 14); //代码雨列数

    var step = 16;    //步长,每一列内部数字之间的上下间隔

    ctx.font = "bold 26px microsoft yahei"; //声明字体,个人喜欢微软雅黑

    function createColorCv() {

        //画布基本颜色

        ctx.fillStyle = "#242424";

        ctx.fillRect(0, 0, cw, ch);

    }

    //创建代码雨

    function createCodeRain() {

        for (var n = 0; n < cols; n++) {

            var col = [];

            //基础位置,为了列与列之间产生错位

            var basePos = parseInt(Math.random() * 300);

            //随机速度 3~13之间

            var speed = parseInt(Math.random() * 10) + 3;

            //每组的x轴位置随机产生

            var colx = parseInt(Math.random() * cw)

            //绿色随机

            var rgbr = 0;

            var rgbg = parseInt(Math.random() * 255);

            var rgbb = 0;

            //ctx.fillStyle = "rgb("+r+','+g+','+b+")"

            for (var i = 0; i < parseInt(ch / step) / 2; i++) {

                var code = {

                    x: colx,

                    y: -(step * i) - basePos,

                    speed: speed,

                    //  text : parseInt(Math.random()*10)%2 == 0 ? 0 : 1  //随机生成0或者1

                    text: ["好","好","学","习","天","天","向","上"][parseInt(Math.random() * 11)], //随机生成字母数组中的一个

                    color: "rgb(" + rgbr + ',' + rgbg + ',' + rgbb + ")"

                }

                col.push(code);

            }

            codeRainArr.push(col);

        }

    }

    //代码雨下起来

    function codeRaining() {

        //把画布擦干净

        ctx.clearRect(0, 0, cw, ch);

        //创建有颜色的画布

        //createColorCv();

        for (var n = 0; n < codeRainArr.length; n++) {

            //取出列

            col = codeRainArr[n];

            //遍历列,画出该列的代码

            for (var i = 0; i < col.length; i++) {

                var code = col[i];

                if (code.y > ch) {

                    //如果超出下边界则重置到顶部

                    code.y = 0;

                } else {

                    //匀速降落

                    code.y += code.speed;

                }

                

                //1 颜色也随机变化

                ctx.fillStyle = "hsl("+(parseInt(Math.random()*359)+1)+",30%,"+(50-i*2)+"%)"; 

                //2 绿色逐渐变浅

                // ctx.fillStyle = "hsl(123,80%,"+(30-i*2)+"%)"; 

                // 3 绿色随机

                // var r= 0;

                // var g= parseInt(Math.random()*255) + 3;

                // var b= 0;

                // ctx.fillStyle = "rgb("+r+','+g+','+b+")";

                //4 一致绿

                // ctx.fillStyle = code.color;

                //把代码画出来

                ctx.fillText(code.text, code.x, code.y);

            }

        }

        requestAnimationFrame(codeRaining);

    }

    //创建代码雨

    createCodeRain();

    //开始下雨吧 GO>>

    requestAnimationFrame(codeRaining);

</script>

   

</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值