JS原生再现黑客帝国文字矩阵

黑客帝国文字矩阵

  • 废话不多说直接上完整代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body{
            margin: 0;
            padding: 0;
            overflow: hidden;
        }
        canvas{
            /* 默认 300x150  canvas不能在CSS中设置宽高 */
            background-color: pink;
        }
    </style>

</head>
<body>
    <canvas width="200" height="200"></canvas>
    <script>
        //1.画布
        let canvas = document.querySelector('canvas');
        //2.画笔 2d 平面
        let ctx = canvas.getContext('2d');
        //获取浏览器的宽 和 高 赋值 画布 获取可见区域的大小
        let ww = document.documentElement.clientWidth;
        let hh = document.documentElement.clientHeight;
        //赋值
        canvas.width = ww;
        canvas.height = hh;
        //1.绘制的文字  2.X轴的位置  3.Y轴的位置
        //每个字的大小
        let fontSize = 20;
        //一行可以放多少个字  进行取整  73.123456  向上  74   向下  73
        let clos = Math.floor(ww/fontSize);
        let num = [];
        for(let i = 0; i < clos; i++){
            num.push(0);//放入0
        }   

        //2.绘制文字的函数
        function draw(){
            //幕布效果  颜色
            ctx.fillStyle = 'rgba(0,0,0,0.05)';//每绘制一次+0.05
            //幕布绘制的位置  从X  0  Y  0  到  X  ww  Y  hh  结束
            ctx.fillRect(0,0,ww,hh);

            //创建一个数字组存放特效字符
            let sec = ['🌟','🌞','✨','☔','😹'];//可自行添加自己喜欢的特效字符
            for(let i = 0; i < sec.length; i++){
                let s = Math.floor(Math.random() * sec.length);
                str = sec[s];
            }

            // let str = '❆';//不使用数组的请况
            ctx.font = '600 '+fontSize+'px 微软雅黑'
            ctx.fillStyle = '#fff'
            
            for(let i = 0; i < clos; i++){
                let x = i * fontSize;
                let y = num[i] * fontSize;
                ctx.fillText(str,x,y);//核心代码  方法  每次  写一个字
                num[i]++;
                if(y > hh && Math.random() > 0.995){
                    num[i] = 0;
                }
            }
        }
        setInterval(draw,100);
    </script>
</body>
</html>
  • 效果图

在这里插入图片描述

//博客地址:https://blog.csdn.net/qq_44760844?spm=1001.2100.3001.5343
//
//                            _ooOoo_
//                           o8888888o
//                           88" . "88
//                           (| -_- |)
//                           O\  =  /O
//                        ____/`---'\____
//                      .'  \\|     |//  `.
//                     /  \\|||  :  |||//  \
//                    /  _||||| -:- |||||-  \
//                    |   | \\\  -  /// |   |
//                    | \_|  ''\---/''  |   |
//                    \  .-\__  `-`  ___/-. /
//                  ___`. .'  /--.--\  `. . __
//               ."" '<  `.___\_<|>_/___.'  >'"".
//              | | :  `- \`.;`\ _ /`;.`/ - ` : | |
//              \  \ `-.   \_ __\ /__ _/   .-` /  /
//         ======`-.____`-.___\_____/___.-`____.-'======
//                            `=---='
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//                      Buddha Bless, No Bug !
//
//                       .::::.
//                     .::::::::.
//                    :::::::::::
//                 ..:::::::::::'
//              '::::::::::::'
//                .::::::::::
//           '::::::::::::::..
//                ..::::::::::::.
//              ``::::::::::::::::
//               ::::``:::::::::'        .:::.
//              ::::'   ':::::'       .::::::::.
//            .::::'      ::::     .:::::::'::::.
//           .:::'       :::::  .:::::::::' ':::::.
//          .::'        :::::.:::::::::'      ':::::.
//         .::'         ::::::::::::::'         ``::::.
//     ...:::           ::::::::::::'              ``::.
//    ````':.          ':::::::::'                  ::::..
//                       '.:::::'                    ':'````..
//
//
//      ┏┛ ┻━━━━━┛ ┻┓
//      ┃       ┃
//      ┃   ━   ┃
//      ┃ ┳┛   ┗┳ ┃
//      ┃       ┃
//      ┃   ┻   ┃
//      ┃       ┃
//      ┗━┓   ┏━━━┛
//        ┃   ┃   神兽保佑
//        ┃   ┃   代码无BUG!
//        ┃   ┗━━━━━━━━━┓
//        ┃           ┣┓
//        ┃             ┏┛
//        ┗━┓ ┓ ┏━━━┳ ┓ ┏━┛
//          ┃ ┫ ┫   ┃ ┫ ┫
//          ┗━┻━┛   ┗━┻━┛
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

财富自由不是梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值