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 相关文章推荐
半角全角相互转换的js函数
Oct 16 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
Mar 24 Javascript
angularjs创建弹出框实现拖动效果
Aug 25 Javascript
js enter键激发事件实例代码
Aug 17 Javascript
Bootstrap3 Grid system原理及应用详解
Sep 30 Javascript
Vue自定义指令介绍(2)
Dec 08 Javascript
JS中如何实现点击a标签返回页面顶部的问题
Jan 19 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
Sep 10 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
Jan 19 Javascript
js图片无缝滚动插件使用详解
May 26 Javascript
js+canvas实现简单扫雷小游戏
Jan 22 Javascript
我所理解的JavaScript中的this指向
Sep 04 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中的垃圾回收机制
2015/08/10 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
javascript表单验证大全
2015/08/12 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
2018/03/15 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
python实现字符串加密成纯数字
2019/03/19 Python
python实现mean-shift聚类算法
2020/06/10 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
怎么写有吸引力的自荐信
2013/11/17 职场文书
工商管理系学生的自我评价分享
2013/11/29 职场文书
同事吵架检讨书
2014/02/05 职场文书
本科毕业生求职自荐信
2014/04/09 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
新品发布会策划方案
2014/06/08 职场文书
打架检讨书
2015/01/27 职场文书
早恋主题班会
2015/08/14 职场文书