欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

canvas实现数字雨效果

程序员文章站 2024-03-18 17:54:34
...

效果展示:

canvas实现数字雨效果源码展示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数字雨</title>
</head>
<body>
<canvas style="border: 1px solid #000;">更新浏览器</canvas>
<script>

    var can = document.querySelector("canvas");
    var ctx = can.getContext("2d");
    can.width = 1500;
    can.height = 700;
    var canWidth = can.width;
    var canHeight = can.height;
    //定义一个渐变色
    var gl = ctx.createLinearGradient(0, 0, canWidth, canHeight);
    gl.addColorStop(0, 'red');
    // gl.addColorStop(.25,'green');
    gl.addColorStop(.5, 'yellow');
    // gl.addColorStop(.75,'blue');
    gl.addColorStop(1, 'cyan');

    // 1  获取随机内容
    var str = '0123456789zxcvbnmasdfghjklqwertyuiop';
    // 2 设置基本通体 样式
    var fontSize = 16;
    ctx.font = fontSize + "px '宋体'";
    // 3 设置画的列数
    var column = canWidth / fontSize;
    // 4 创建一个数组用来存放每一列的数据  并且给数组的每一列设置初始值   (用来存放每一列自己的效果)
    var arr = [];
    for (var i = 0; i < column; i++) {
        arr[i] = 0;
    }
    //  业务逻辑    不一定相等  因为有可能 column是个小数
    // console.log( arr.length);
    // console.log(column );
    // console.log(column == arr.length);
    
    // 5定时器开始跑数字
    setInterval(draw, 50);

    // draw  方法的作用 绘制数字雨
    function draw() {
        //设置样式 填充样式
        ctx.fillStyle = "rgba(0,0,0,0.07)";
        //绘制满屏填充效果
        ctx.fillRect(0, 0, canWidth, canHeight);
        //    设置每行的文本内容  一行写多少那???  就是那个列数
        //     ctx.fillStyle = "#0f0";
        ctx.fillStyle = gl;
        // for(var a = 0; a<column;a++){   //能行不?????  但是里不严谨的情况下可以一样但是那 建议是用arr.length
        for (var a = 0; a < arr.length; a++) {
            ctx.fillText(str[Math.floor(Math.random() * str.length)], fontSize * a, fontSize * arr[a]);
            arr[a]++;
            //自己列数的状态自己判断  不在整体判断   && 后面表示随机掉落概率的判断
            if (arr[a] * fontSize > canHeight && Math.random() > 0.9) {
                arr[a] = 0;
            }
        }
        //  给每一个字 设置颜色 就需要在for 中设置 但是要注意一定要设置颜色前在添加个beginPath() 不然颜色会显示最后一个
        //    ?? 这个最后颜色指的是谁???
    }
</script>


</body>
</html>