canvas实现验证码登录框

demo图片

在这里插入图片描述

一步步实现,结构 ----> 样式 ----> 交互功能

html 结构

    <div class="wrapper">
        <div class="inputBox">
            <input type="text" placeholder="请输入验证码">
        </div>
        <p class="error"></p>
        <div class="canvasBox">
            <div class="imgBox">
                <canvas id="myCanvas" width=300 height=80></canvas>
            </div>
            <input type="button" class="refresh">
        </div>
        <button class="submit">submit</button>
    </div>

【仅 html】
在这里插入图片描述


css 样式

*{
    margin:0;
    padding:0;
}
.wrapper{
    margin:30px;
    width:345px;
    padding:15px;
    border:1px solid #ccc;
    border-radius: 5px;
}
.inputBox{
    position: relative;
}
/* 鼠标聚焦时输入框变色 */
.inputBox input:focus {
    border-style:solid;  
    border-color: #03a9f4;  
    box-shadow: 0 0 5px #03a9f4; 
    }

.inputBox input{
    display: inline-block;
    width: 300px;
    outline: none;
    padding: 10px;
    border:1px solid #ccc;
    border-radius: 5px;
    box-sizing: border-box;
}
.inputBox span{
    position: absolute;
    width: 32px;
    height: 32px;
    background:url('./images/error.png');
    background-size:100%;
    display:none;
}
.error{
    color:red;
    margin-top:10px;
    font-size:12px;
    display:none;
}
.canvasBox{
    position: relative;
    margin-top: 15px;
    /* border:1px solid #000; */
}
.canvasBox .imgBox{
    width: 300px;
    height: 80px;
    border: 1px solid #ccc;
    border-radius: 5px;
}
.canvasBox .refresh{
    position: absolute;
    right:0;
    top:50%;
    display:inline-block;
    width: 32px;
    height: 32px;
    background:url('./images/refresh.png');
    background-size: 100%;
    margin-top: -16px;
    border: 0;
}
.submit{
    position:relative;
    left:90px;
    padding: 8px;
    border:0;
    background-color:#367CF1;
    color:#fff;
    font-size: 15px;
    margin-top:15px;
    border-radius: 5px;
    cursor:pointer;
} 

【引入 css】
在这里插入图片描述


js部分

【分析基本功能】
1. 进入页面,图片验证码已经生成。调用createCanvas() 方法来生成验证码。
2. 函数createCanvas() 生成验证码。函数功能应有:创建画布,画布背景,随机生成的六位数验证码(由数字和大小写英文字母组成的字符串)填充到画布。
3. 验证码点击刷新。
4. 填写验证码。点击提交 --> 进行判断 --> 正确 / 错误
5. 验证码错误。在提交框的右边出现❌,出现错误提示“验证码错误,请重新输入”,并刷新验证码。
6. 验证码正确。在提交框的右边出现 √ ,并刷新验证码。


// 验证码可从 arr[] 挑六位组成
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 value;
function createCanvas(){
    //选取要显示的字符,生成验证码区域
    var canvasStr = ''; //将要画到画布上的验证码
    value = '';
    for(var i = 0; i < 6; i++){
        var a = arr[Math.floor(Math.random() * arr.length)];
        canvasStr += a + ' ';
        value += a;
    }
    
    var myCanvas = document.getElementById('myCanvas');
    var ctx = myCanvas.getContext('2d');
    var oImg = new Image();
    oImg.src = './images/bg.png';
    oImg.onload = function(){

        //背景绘制
        var pattern = ctx.createPattern(oImg,'repeat');
        ctx.fillStyle = pattern;
        ctx.fillRect(0,0,myCanvas.width,myCanvas.height);

        //文字绘制
        ctx.textAlign = 'center';
        ctx.fillStyle = '#ccc';
        ctx.font = '46px Roboto Slab';
        ctx.setTransform(1,-0.12,0.3,1,0,12);
        ctx.fillText(canvasStr,myCanvas.width/2,60);
    }
}
createCanvas();

//提交
$('.submit').on('click',function(){
    showResult();
});

$('.refresh').on('click',function(){
    createCanvas();
})

//验证码判断
function showResult(){
    var inputValue = $('.inputBox input').val();
    console.log(inputValue);
    if(inputValue == value){
        $('.inputBox span').css({
            background:'url("./images/true.png")',
            display: 'inline-block'
        })
        $('.error').css('display','none');
        createCanvas();
    }else{
        $('.inputBox span').css({
            background:'url("./images/false.png")',
            display: 'inline-block'
        });
        $('.error').css('display','block').html('验证码错误,请重新输入');
        createCanvas();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值