三分钟教你实现“代码雨”

本篇文章介绍一下如何实现“代码雨”。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

先看看效果

1、绿色:

2、彩色:

3、背景色:

4、绿色逐渐变浅:

 源代码:

<!DOCTYPE html>
<html>
   
<head>   
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <title>Code -by ZhenYu.Sha</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: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "s", "t", "u", "v", "w", "x", "y", "z"][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>

【推荐学习:html视频教程

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是利用51单片机实现数码管倒计时的代码: ```c #include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar code table[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f }; // 数码管显示0-9的编码表 void delay(uint i) // 延时函数 { while (i--); } void main() { uchar minute = 3, second = 0; // 初始化倒计时的时间 while (1) { P2 = 0x00; // 关闭数码管,准备显示下一个数字 P0 = table[minute / 10]; // 显示分钟的十位 P2 = 0x01; // 打开数码管,显示分钟的十位 delay(1000); // 延时1秒 P2 = 0x00; // 关闭数码管,准备显示下一个数字 P0 = table[minute % 10]; // 显示分钟的个位 P2 = 0x02; // 打开数码管,显示分钟的个位 delay(1000); // 延时1秒 P2 = 0x00; // 关闭数码管,准备显示下一个数字 P0 = table[second / 10]; // 显示秒钟的十位 P2 = 0x04; // 打开数码管,显示秒钟的十位 delay(1000); // 延时1秒 P2 = 0x00; // 关闭数码管,准备显示下一个数字 P0 = table[second % 10]; // 显示秒钟的个位 P2 = 0x08; // 打开数码管,显示秒钟的个位 delay(1000); // 延时1秒 if (--second == 0xff) // 秒钟减1,如果减到0,则分钟减1 { second = 59; if (--minute == 0xff) // 分钟减1,如果减到0,则倒计时结束 { break; } } } while (1); // 倒计时结束,停在这里 } ``` 需要注意的是,本代码中的延时函数是通过循环实现的,因此可能会有一定的误差。如果需要更精确的延时,可以使用定时器。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值