• 利用canvas写一个验证码小功能


    刚刚开始接触canvas,写个验证码小功能练练手,实现效果图如下:

    主要代码如下:

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <link rel="stylesheet" href="index.css">
    </head>
    <body>
        <div class="wrapper">
            <div class="inputBox">
                <input type="text" class = 'inputCaptcha' placeholder = "请输入验证码">
                <span class="captchaIcon"></span>
            </div>
            <p class="errorText"></p>
            <div class="canvasBox">
                <div class="imageBox">
                    <canvas width =300 height=80 id = 'canvasCaptcha'></canvas>
                    <input type="button" class='refresh'>
                </div>
            </div>
            <button class="captchaSubmit">submit</button>
        </div>
        <script src='./jquery.js'></script>
        <script src = './index.js'></script>
    </body>
    </html>

     css

    * {
        margin: 0;
        padding: 0;
    }
    
    .wrapper {
        width: 345px;
        border: 1px solid #ccc;
        border-radius: 10px;
        padding: 20px 10px;
        margin: 30px 30px;
    }
    
    .inputBox {
        width: 345px;
        margin: 0 auto 10px;
        position: relative;
    }
    
    .inputBox .inputCaptcha {
        display: inline-block;
        height: 50px;
        width: 86%;
        text-indent: 1em;
        border: 1px solid #ddd;
        border-radius: 5px;
    }
    
    .inputBox .captchaIcon {
        display: none;
        position: absolute;
        top: 50%;
        right: 0px;
        margin-top: -16px;
        width: 32px;
        height: 32px;
        background-size: 100% 100%;
    }
    
    .errorText {
        width: 345px;
        margin: 0 auto;
        font-size: 12px;
        color: red;
        display: none;
    }
    
    .canvasBox {
        width: 345px;
        margin: 10px auto;
        position: relative;
    }
    
    #canvasCaptcha {
        border-radius: 10px;
    }
    
    .canvasBox .refresh {
        width: 34px;
        height: 34px;
        position: absolute;
        right: 0px;
        top: 50%;
        margin-top: -17px;
        border: 0;
        border-radius: 6px;
        background-image: url('./images/update.png');
        background-size: cover;
    }
    
    .captchaSubmit {
        padding: 10px 20px;
        background-color: #62b900;
        border: 0;
        font-size: 20px;
        border-radius: 5px;
        color: #fff;
    }

    js

    var arr = [0,1,2,3,4,5,6,7,8,9];
    for(var i = 65;i < 122;i++){
        if(i>90&&i<97){
            continue;
        }
        arr.push(String.fromCharCode(i));
    }
    //每个验证码可能出现的字母或数字(区分大小写)
    var len = arr.length;
    //验证码的长度
    var canvasStr,value;
    //验证码值
    function createCanvas(){ canvasStr = ''; value = ''; for(var i =0 ;i < 6;i++){ var a = arr[Math.floor(Math.random()*len)]; canvasStr += a+' '; value += a; }
    //canvas
    var oCanvas = document.getElementById('canvasCaptcha'); var ctx = oCanvas.getContext('2d'); var w = oCanvas.width; var h = oCanvas.height; var oImg = new Image(); oImg.src = './images/bg.jpg'; oImg.onload = function(){ var pattern = ctx.createPattern(oImg,'repeat'); ctx.fillStyle = pattern; ctx.fillRect(0,0,w,h); ctx.fillStyle = '#ccc'; ctx.textAlign = 'center'; ctx.font = '46px Roboto Slab'; ctx.setTransform(1,-0.12,0.2,1,0,12); ctx.fillText(canvasStr,w/2,60); } } createCanvas();
    //验证输入的验证码与图中验证码时候相等
    function captcha(e){ if(e == value){ return true; } else{ return false; } }

    //点击提交按钮时的结果
    function showResult(){ var inputValue = $('.inputCaptcha').val(); if(inputValue == '' ||inputValue == null || inputValue == 'undefined'){ $('.errorText').css({display:'inline-block'}).html('验证码不能为空,请重新输入!'); $('.captchaIcon').css({display:'inline-block',backgroundImage:"url('./images/false.png')"}); }else{ var flag = captcha(inputValue); if(!flag){ $('.errorText').css({display:'inline-block'}).html('验证码错误,请重新输入!'); $('.captchaIcon').css({display:'inline-block',backgroundImage:"url('./images/false.png')"}); }else{ $('.captchaIcon').css({display:'inline-block',backgroundImage:"url('./images/true.png')"}); } } } $('.captchaSubmit').click(showResult);//提交 $('.refresh').click(createCanvas);//刷新
    //点击input框 $(
    '.inputCaptcha').focus(function(){ $('.errorText').add($('.captchaIcon')).fadeOut(100); })
  • 相关阅读:
    Intel 10nm全系曝光!巨头也跑不动了
    国产智能手机占据半壁江山却依旧难掩三大尴尬事实
    顺势而为,HTML发展与UI组件设计进化
    怎么让引导不再是无用小透明?
    C++BUILDER的文件操作
    C++ Builder获取系统文件的路径
    C++Builder 常用String
    C++ 判断是否为邮箱格式
    AnsiString, String, char,char
    BCB如何编写,调用动态链接库DLL
  • 原文地址:https://www.cnblogs.com/freefy/p/9358963.html
Copyright © 2020-2023  润新知