原生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 相关文章推荐
JQuery团队打造的javascript单元测试工具QUnit介绍
Feb 26 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
Jun 10 Javascript
javascript表单验证大全
Aug 12 Javascript
jQuery实现移动端滑块拖动选择数字效果
Dec 24 Javascript
jQuery siblings()用法实例详解
Apr 26 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
Aug 02 Javascript
bootstrap手风琴制作方法详解
Jan 11 Javascript
node.js入门学习之url模块
Feb 25 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
Jul 09 Javascript
layui获取选中行数据的实例讲解
Aug 19 Javascript
详解html-webpack-plugin插件(用法总结)
Sep 12 Javascript
javascript数组includes、reduce的基本使用
Jul 02 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
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
DWR Ext 加载数据
2009/03/22 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
django在开发中取消外键约束的实现
2020/05/20 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
sealed修饰符是干什么的
2012/10/23 面试题
Final类有什么特点
2012/04/25 面试题
中式结婚主持词
2014/03/14 职场文书
初中生操行评语大全
2014/04/24 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis
python 对图片进行简单的处理
2021/06/23 Python
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏