原生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 相关文章推荐
JS函数实现动态添加CSS样式表文件
Dec 15 Javascript
jquery解析XML字符串和XML文件的方法说明
Feb 21 Javascript
通过实例理解javascript中没有函数重载的概念
Jun 03 Javascript
Node.js静态文件服务器改进版
Jan 10 Javascript
利用require.js与angular搭建spa应用的方法实例
Jul 19 Javascript
vue Render中slots的使用的实例代码
Jul 19 Javascript
微信小程序代码上传、审核发布小程序
May 18 Javascript
node 标准输入流和输出流代码实例
Sep 19 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
Nov 26 Javascript
vue自定义标签和单页面多路由的实现代码
May 03 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
Jul 22 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 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分页示例代码
2007/03/19 PHP
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
php获得url参数中具有&amp;的值的方法
2014/03/05 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
php递归函数怎么用才有效
2018/02/24 PHP
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
js+css实现打字效果
2020/06/24 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
python简单实现计算过期时间的方法
2015/06/09 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
python 不以科学计数法输出的方法
2018/07/16 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
如何通过python实现人脸识别验证
2020/01/17 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
Python绘制动态水球图过程详解
2020/06/03 Python
python如何设置静态变量
2020/09/07 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
Java中实现多态的机制
2015/08/09 面试题
酒店拾金不昧表扬信
2014/01/18 职场文书
实习生工作证明范本
2014/09/14 职场文书
技术股东合作协议书
2014/12/02 职场文书
python scrapy简单模拟登录的代码分析
2021/07/21 Python
mysql创建存储过程及函数详解
2021/12/04 MySQL
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python