美文网首页JS内容
Canvas<文字验证码效果>

Canvas<文字验证码效果>

作者: 誰在花里胡哨 | 来源:发表于2020-03-16 13:18 被阅读0次
效果图:
20200316.gif

因为若是在项目中使用,一般会根据后端返回的信息,前端进行生成验证码,所以此处并没有针对验证码做随机处理。

 /* 画布背景色 */
background: #f1f1f1;
    let dotNum = 20; //背景小点数量
    let lineNum = 4; //背景线条数量
    let codeText = "FG2H" //验证码文字
代码如下:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body,
        html {
            height: 100%;
        }

        body {
            display: flex;
            justify-content: center;
            align-items: center;
            margin: 0;
        }

        .verification_box {
            box-sizing: border-box;
            display: flex;
        }
        .code canvas {
            display: block;
            /* 画布背景色 */
            background: #f1f1f1;
        }
    </style>
</head>

<body>
    <div class="verification_box">
        <div class="code">
            <canvas id="code_canvas" width="150" height="60"></canvas>
        </div>
    </div>
</body>
<script>
    let canvas = document.getElementById("code_canvas");
    let ctx = canvas.getContext("2d");
    let c_w = canvas.width;
    let c_h = canvas.height;
    let dotNum = 20; //背景小点数量
    let lineNum = 4; //背景线条数量
    let codeText = "FG2H" //验证码文字

    //随即方法
    function random(min, max) {
        return Math.random() * (max - min + 1) + min;
    }
    //定义一个随机颜色
    function rndCol() {
        var r = Math.floor(Math.random() * 255);
        var g = Math.floor(Math.random() * 255);
        var b = Math.floor(Math.random() * 255);
        return "rgb(" + r + "," + g + "," + b + ")";
    }
    //画小点
    function drawDot() {
        for (let i = 0; i < dotNum; i++) {
            ctx.beginPath();
            ctx.fillStyle = "#cccccc";
            ctx.arc(Math.random() * c_w, Math.random() * c_h, 1, 0, Math.PI * 2);
            ctx.fill();
            ctx.closePath();
        }
    }
    //画线
    function drawLine() {
        for (let i = 0; i < lineNum; i++) {
            let start_x = Math.random() * c_w;
            let start_y = Math.random() * c_h;
            let end_x = Math.random() * c_w;
            let end_y = Math.random() * c_h;
            ctx.beginPath();
            ctx.strokeStyle = rndCol()
            ctx.lineWidth = 2;
            ctx.moveTo(start_x, start_y);
            ctx.lineTo(end_x, end_y);
            ctx.stroke();
            ctx.closePath();
        }
    }
    //画文字
    function drawText() {
        let textArray = codeText.split('');
        for (let i = 0; i < textArray.length; i++) {
            let fs = random(30, 40);//字体的大小
            let deg = random(-30, 30);//字体旋转角度
            ctx.font = fs + "px Verdana"
            ctx.fillStyle = rndCol();
            ctx.textBaseline = "top";
            // canvas.save()用来保存先前状态的
            // canvas.restore()用来恢复之前保存的状态
            // 注:两种方法必须搭配使用,否则没有效果
            ctx.save();
            ctx.translate(c_w / textArray.length * i + 15, random(15, c_h - 15));
            ctx.rotate(deg * Math.PI / 180);
            ctx.fillText(textArray[i], -15 + 5, -15);
            ctx.restore();
        }
    }
    drawText()
    drawDot()
    drawLine()
</script>

</html>

相关文章

  • Canvas<文字验证码效果>

    效果图: 因为若是在项目中使用,一般会根据后端返回的信息,前端进行生成验证码,所以此处并没有针对验证码做随机处理。...

  • canvas Seven 文字

    canvas可以画图,也可以写文字,下面是文字的相关用法。 效果图: 效果图: 1、strokeText:边框文字...

  • Canvas动态创建验证码案例

    Canvas动态创建验证码案例

  • canvas验证码的实现

    通过canvas画简单的验证码 #canvas{border: 1px s...

  • Canvas实现文字粒子效果

    最终实现效果 实现思路: 获取到canvas绘制后屏幕上像素点的数组,在目标像素点上绘制粒子替换掉原来的内容 绘制...

  • Canvas<粒子文字效果>

    效果图: 参考效果地址: (孰能生巧,现在只能先 “比葫芦画瓢”,慢慢来吧,注释很全,不过还是需要自己加以理解 ?...

  • canvas 绘制文字图片效果

    效果图

  • java实现动态验证码

    java动态实现验证码,供大家参考,具体内容如下 【实现效果】 点击图片或者文字可以更换验证码验证码随机生成,由大...

  • canvas绘制仪表盘

    效果图 html添加canvas js获取canvas 定义方法绘制圆环 绘制刻度线 绘制文字 绘制圆 绘制三角形...

  • QmlCanvas文字

    qml的Canvas可以绘制文字, 图片, 各种形状, 今天这里只绘制文字, 模拟qml本身的Text效果 需要完...

网友评论

    本文标题:Canvas<文字验证码效果>

    本文链接:https://www.haomeiwen.com/subject/ezlgehtx.html