原生js+canvas实现验证码


Posted in Javascript onNovember 29, 2020

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

效果展示:

原生js+canvas实现验证码

源码展示:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<style>
 
  canvas {
    border: 1px solid #000;
    vertical-align: bottom;
  }
 
  input {
    padding: 0;
    width: 120px;
    height: 30px;
    vertical-align: bottom;
    border: 1px solid #000;
  }
 
</style>
 
 
<input type="text" name="textContent" placeholder="输入">
<canvas id="can" width="120" height="30"></canvas>
<button>提交</button>
 
 
<script>
 
 
  /*1、背景颜色时随机的
 * 2、其中的内容是随机的
 * 3、内容的颜色 随机的
 * 4、每个字的旋转度数随机的
 * 5、文本的大小随机的
 * 6、干扰线的位置随机的
 * 7、干扰线的颜色随机的
 * 8、干扰点
 * */
 
  var btn = document.querySelector("button");
  var can = document.querySelector("canvas");
  var ctx = can.getContext("2d");
 
  var text = "0123456789abcdefghijklmnopqrstuvwsyzABCDEFGHIGKLMNOPQRSTUVWSYZ";
 
 
  //设置4个内容 将canvas 平分成4分 然后让内容在1/4的空间旋转缩放
  //原理 :每次都是位移旋转之后再回复原位
  for (var i = 0; i < 4; i++) {
    var txt = text[randNum(0,text.length-1)];
 
    ctx.fillStyle = getRandColor(80,150);
    ctx.font=randNum(12,25)+"px '宋体'";
    ctx.textBaseline = "top";
    var x = randNum(0,10);
 
    var deg = randNum(-30,30);
 
    ctx.translate(x+30*i,0);
    ctx.rotate(Math.PI/180*deg);
    ctx.fillText(txt,0,0);
    ctx.rotate(Math.PI/180*-deg);
    ctx.translate(-(x+30*i),0);
 
  }
 
 
  /*干扰点*/
  for(var i=0;i<30;i++){
    ctx.beginPath();
    ctx.arc(randNum(0,120),randNum(0,30),1,0,Math.PI*2);
    ctx.fillStyle=getRandColor(150,180);
    ctx.fill();
  }

 
  /*干扰线*/
  for(var i=0;i<4;i++){
    ctx.beginPath();
    ctx.moveTo(randNum(0,120),randNum(0,30));
    ctx.lineTo(randNum(0,120),randNum(0,30));
    ctx.strokeStyle=getRandColor(150,180);
    ctx.lineWidth= randNum(1,2);
    ctx.stroke();
  }
 
 
  /* 获取随机色值*/
 
  //  a 先获取一个随机数
  console.log(Math.random()); //产生一个0~1之间的随机小数
  var num = Math.random() * (100 - 30 + 1) + 30; //产生一个随机数30~100 之间的数
  console.log(num);
 
  //  b 获取一个区间段的随机数(整数)
  function randNum(min, max) {
    return parseInt(Math.random() * (max - min + 1) + min);
  }
 
  //   c获取随机颜色值
  function getRandColor(min, max) {
    var R = randNum(min, max);
    var G = randNum(min, max);
    var B = randNum(min, max);
 
    return 'rgb(' + R + ',' + G + ',' + B + ')';
  }
 
 
</script>
 
 
</body>
</html>

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

Javascript 相关文章推荐
HTML 自动伸缩的表格Table js实现
Apr 01 Javascript
基于JQuery实现CheckBox全选全不选
Jun 27 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
Dec 31 Javascript
5个JavaScript经典面试题
Oct 13 Javascript
js实现根据身份证号自动生成出生日期
Dec 15 Javascript
轻松搞定jQuery.noConflict()
Feb 15 Javascript
jQuery Chart图表制作组件Highcharts用法详解
Jun 01 Javascript
Javascript 两种刷新方法以及区别和适用范围
Jan 17 Javascript
在js代码拼接dom对象到页面上的模板总结
Oct 21 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 Javascript
ant design vue datepicker日期选择器中文化操作
Oct 28 Javascript
原生js实现弹幕效果
Nov 29 #Javascript
javascript实现点击小图显示大图
Nov 29 #Javascript
js实现简易点击切换显示或隐藏
Nov 29 #Javascript
webpack4从0搭建组件库的实现
Nov 29 #Javascript
JS指定音频audio在某个时间点进行播放
Nov 28 #Javascript
Vue用mixin合并重复代码的实现
Nov 27 #Vue.js
js实现扫雷源代码
Nov 27 #Javascript
You might like
php笔记之:php数组相关函数的使用
2013/04/26 PHP
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
JSON 数据格式详解
2017/09/13 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
Numpy数组的保存与读取方法
2018/04/04 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
音乐系毕业生自荐信
2013/10/27 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
委托证明范本
2014/11/25 职场文书
2014年法务工作总结
2014/12/11 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
致运动员赞词
2015/07/22 职场文书
销售人员管理制度
2015/08/06 职场文书