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 相关文章推荐
基于jquery 的一个progressbar widge
Oct 29 Javascript
js中的cookie的读写操作示例详解
Apr 17 Javascript
QQ空间顶部折页撕开效果示例代码
Jun 15 Javascript
js实现textarea限制输入字数
Feb 13 Javascript
js实现旋转木马效果
Mar 17 Javascript
JavaScript实现分页效果
Mar 28 Javascript
JQuery EasyUI的一些常用组件
Jul 12 jQuery
使用vue如何构建一个自动建站项目
Feb 05 Javascript
微信小程序实现收藏与取消收藏切换图片功能
Aug 03 Javascript
webpack 代码分离优化快速指北
May 18 Javascript
layui原生表单验证的实例
Sep 09 Javascript
vue 路由守卫(导航守卫)及其具体使用
Feb 25 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
使用PHP接收POST数据,解析json数据
2013/06/28 PHP
zend framework重定向方法小结
2016/05/28 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
2014/12/29 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
详解redux异步操作实践
2018/08/15 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
教你安装python Django(图文)
2013/11/04 Python
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
全面解读Python Web开发框架Django
2014/06/30 Python
Python 详解基本语法_函数_返回值
2017/01/22 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
分析Python中解析构建数据知识
2018/01/20 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
用python3 返回鼠标位置的实现方法(带界面)
2019/07/05 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
详细分析Python collections工具库
2020/07/16 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
《最大的麦穗》教学反思
2014/04/17 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server