原生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 相关文章推荐
激活 ActiveX 控件
Oct 09 Javascript
用倒置滤镜把div倒置,再把table倒置。
Jul 31 Javascript
Javascript 继承实现例子
Aug 12 Javascript
JavaScript去掉数组中的重复元素
Jan 13 Javascript
JavaScript中“+”的陷阱深刻理解
Dec 04 Javascript
$.extend 的一个小问题
Jun 18 Javascript
基于JavaScript实现div层跟随滚动条滑动
Jan 12 Javascript
angular 动态组件类型详解(四种组件类型)
Feb 22 Javascript
JavaScript正则表达式函数总结(常用)
Feb 22 Javascript
Vue+Element实现动态生成新表单并添加验证功能
May 23 Javascript
js实现简单页面全屏
Sep 17 Javascript
vue router-link 默认a标签去除下划线的实现
Nov 06 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 验证码制作(网树注释思想)
2009/07/20 PHP
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
koa源码中promise的解读
2018/11/13 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
Nuxt的路由动画效果案例
2020/11/06 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
跟老齐学Python之关于类的初步认识
2014/10/11 Python
Django内容增加富文本功能的实例
2017/10/17 Python
Python实现基于POS算法的区块链
2018/08/07 Python
学习和使用python的13个理由
2019/07/30 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
优良学风班总结材料
2014/02/08 职场文书
销售口号大全
2014/06/11 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
护士年终考核评语
2014/12/31 职场文书
党校毕业个人总结
2015/02/28 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
实例详解Python的进程,线程和协程
2022/03/13 Python
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang