js+h5 canvas实现图片验证码


Posted in Javascript onOctober 11, 2020

本文实例为大家分享了js+h5 canvas实现图片验证码的具体代码,供大家参考,具体内容如下

实现效果

js+h5 canvas实现图片验证码

一、使用技术

原生js技术+html5 canvas画图

利用Math.random()函数随机生成 颜色 字符串  及障碍物

点击 验证码可变更验证码图案

二、使用步骤

1.html+css

代码如下(示例):

<div class="login_code_box">
        <div class="login_code">
         <input type="text" name="login_code" id="login_code" placeholder="请输入验证码">
                
 
        </div>
        <canvas id="canvas" >
 
        </canvas>
     <!-- <img src="" alt="" title="看不清?单击此处刷新" class="login_code_img" > -->
</div>
#canvas{
  width: 130px;
  height: 45px;
  display: inline-block;
  border: 1px solid #c9c9c9;
  border-radius: 5px;
  
}

2.js

代码如下(示例):

//验证码生成
let canvas=document.getElementById('canvas')//画布对象
 
let show_num=[]//装验证码的数组
//产生随机颜色
function randomColor(){
  var r= Math.floor( Math.random()*256);
  var g= Math.floor( Math.random()*256);
  var b= Math.floor( Math.random()*256);
  return "rgb("+r+","+g+","+b+") "
}
//画布
function draw(show_num){
  let canvas_clientWidth=document.getElementById('canvas').clientWidth//画布长度
  let canvas_clientHeight=document.getElementById('canvas').clientHeight//画布高度
  let context = canvas.getContext("2d")//画布环境 创建 context 对象:
  canvas.width=canvas_clientWidth
  canvas.height=canvas_clientHeight
  let str="A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m";
  let astr=str.split(',');//分割字符串形成数组
  let sLength=astr.length;//数组长度
  for (let i = 0; i <= 3; i++) {
    let j=Math.floor(Math.random()*sLength);//随机索引
    let deg=Math.random()*30*Math.PI/180;//0-30随机弧度
    let text=astr[j];//随机字符
    show_num[i]=text//验证码字符数组
    let x=10+i*20//x坐标
    let y=20+Math.random()*8//y坐标
    //位移 旋转角度 颜色 文字 样式开始位置
    context.font='bold 23px 微软雅黑'
    context.translate(x, y);
    context.rotate(deg);
    context.fillStyle = randomColor();
    context.fillText(text,0,0)
    context.rotate(-deg)
    context.translate(-x,-y)
  }
  //验证码显示小点
  for(let i=0;i<=30;i++){
   context.strokeStyle=randomColor()//设置随机色用小点的颜色
   context.beginPath();//开始一条路径
   let m=Math.random()*canvas_clientWidth;
   let n=Math.random()*canvas_clientHeight;
   context.moveTo(m,n)//移动
   context.lineTo(m + 1, n + 1);//添加一个新点,然后在画布中创建从该点到最后指定点的线条
   context.stroke();//画上面定义好的路径
  }
  //验证码显示线条
  for (let i = 0; i < 8; i++) {
    context.strokeStyle=randomColor()
    context.beginPath()
    context.moveTo(Math.random()*canvas_clientWidth,Math.random()*canvas_clientHeight);
    context.lineTo(Math.random()*canvas_clientWidth,Math.random()*canvas_clientHeight)
    context.stroke()
    
  }
 
}
draw(show_num)
console.log(show_num);
 
canvas.onclick=()=>{
draw(show_num)
console.log(show_num);
}

总结

创建canvas画布,利用随机函数,创建随机颜色 。

draw()函数,用于验证码的生成。字符串分隔存入数组

循环遍历生成验证码的个数

给当前字符串一个位移及旋转角度 文字样式等

随机函数生成小点及线段 context.stroke()画好以上定义好的颜色 位移长短的路径,并显示在canvas画布上

点击canvas画布 可重新生成验证码内容

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript题目,重写函数让其无限相加
Feb 15 Javascript
验证码按回车不变解决方法
Mar 29 Javascript
iframe的父子窗口之间的对象相互调用基本用法
Sep 03 Javascript
js钢琴按钮波浪式图片排列效果代码分享
Aug 26 Javascript
js+css实现select的美化效果
Mar 24 Javascript
基于JavaScript定位当前的地理位置
Apr 11 Javascript
Vue实现双向数据绑定
May 03 Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 Javascript
JS+HTML+CSS实现轮播效果
Nov 28 Javascript
在Mac下彻底卸载node和npm的方法
May 16 Javascript
React路由鉴权的实现方法
Sep 05 Javascript
Vue 401配合Vuex防止多次弹框的案例
Nov 11 Javascript
vue2和vue3的v-if与v-for优先级对比学习
Oct 10 #Javascript
如何手写简易的 Vue Router
Oct 10 #Javascript
如何手写一个简易的 Vuex
Oct 10 #Javascript
echarts实现晶体球面投影的实例教程
Oct 10 #Javascript
详解Vue中Axios封装API接口的思路及方法
Oct 10 #Javascript
在Vue中使用Echarts实例图的方法实例
Oct 10 #Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
Oct 09 #Javascript
You might like
法压式咖啡之制作法
2021/03/03 冲泡冲煮
PHP实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
php eval函数用法总结
2012/10/31 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
jquery 经典动画菜单效果代码
2010/01/26 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
What is view? why do we have view?
2012/06/22 面试题
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
大学生求职自荐信
2015/03/24 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
五年级作文之成长
2019/09/16 职场文书
Python列表删除重复元素与图像相似度判断及删除实例代码
2021/05/07 Python